【发布时间】:2021-02-04 08:35:00
【问题描述】:
我正在尝试组织 10 多个不同的邮箱。
问题在于 UnreadMove。我希望每次 Outlook 打开时在默认收件箱中查找未读邮件,将其复制并将其中一份副本移动到共享收件箱中。
如果要移动一封邮件,它可以工作,但是当有更多邮件时,我会收到错误
“-2147221241 - 客户端操作失败”
或类似的东西。我的 Windows 不是英文的。
当我在失败窗口上按确定时,邮件仍然被复制并移动到正确的文件夹,所以我不知道错误是什么意思。有些邮件复制了两次,所以可能是错误的含义。
MoveAndCopy:收到的邮件被复制并发送到共享收件箱,并在原始文件夹中标记为已读(这有效)。
UnreadMove:应该是当 Outlook 有一段时间没有打开并且原始收件箱收到新邮件时使用。然后我希望复制未读的电子邮件,标记为已读,然后将副本发送到共享收件箱,不应将其标记为已读。
此 Outlook 会话
Private Sub Application_Startup()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub Items_UnreadMove(ByVal Item As Object)
Dim msg As Outlook.MailItem
If Item.Exists = True Then
Set msg = Item
Call UnreadMove(Item)
End If
End Sub
Private Sub Items_ItemAdd(ByVal Item As Object)
On Error GoTo ErrorHandler
Dim msg As Outlook.MailItem
If TypeName(Item) = "MailItem" Then
Set msg = Item
Call MoveAndCopy(Item)
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
对于这两个模块:
Sub UnreadMove(Item As Outlook.MailItem)
Dim Inbox As Outlook.Folder
Dim ns As Outlook.NameSpace
Dim MailDest As Outlook.Folder
Dim CopiedItem As Outlook.MailItem
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
For Each Item In Inbox
If Item.UnRead = True Then
Set CopiedItem = Item.Copy
Item.UnRead = False
Item.Save
Set ns = Outlook.Application.GetNamespace("MAPI")
Set MailDest = ns.Folders("myemail@test.com").Folders("MyInbox")
CopiedItem.Move MailDest
End If
Next Item
End Sub
Sub MoveAndCopy(Item As Outlook.MailItem)
Dim ns As Outlook.NameSpace
Dim MailDest As Outlook.Folder
Dim CopiedItem As Outlook.MailItem
If Item.Class = olMail Then
Set CopiedItem = Item.Copy
Item.UnRead = False
Item.Save
Set ns = Outlook.Application.GetNamespace("MAPI")
Set MailDest = ns.Folders("myemail@test.com").Folders("MyInbox")
CopiedItem.Move MailDest
End If
End Sub
【问题讨论】:
-
她有什么规则运行在她的外表上吗?
-
@RicardoDiaz 不,我没有找到适用于这种情况的规则。因为我想复制邮件并将其标记为已读,然后将原始邮件移动到共享文件夹并保持未读状态。因此,她不必每次都导航到原始收件箱并将其标记为已读。为了安全起见,我还想要一份原始收件箱中的副本。