Outlook VBA宏来同步两个文件夹

时间:2018-10-02 14:29:52

标签: vba outlook-vba

我正在尝试同步两个Outlook文件夹(一个是共享邮箱,另一个是个人自定义文件夹) 我的主要目标是至少在“原始”共享文件夹每次收到应复制到“目标”自定义文件夹中的新邮件时,都使这两个文件夹同步。

我能够在特定时间间隔(例如当天)内检索原始共享邮箱中的所有邮件

Private ons As Outlook.NameSpace
Dim sourceFolder As Outlook.Folder
Dim sourceFolderRecipient As Outlook.Recipient
Set sourceFolderRecipient = ons.CreateRecipient("sharedAccount@myDomain.com")
Set sourceFolder = ons.GetSharedDefaultFolder(sourceFolderRecipient, olFolderInbox)
Dim sourceFolderMails As Outlook.items
Set sourceFolderMails = sourceFolder.items
Dim sourceFolderMail As Outlook.MailItem  

Dim strFilter As String
strFilter = "[SentOn] > '" & Date & "'"

Set sourceFolderMails = sourceFolderMails.Restrict(strFilter)

我也可以复制目标文件夹中sourceFolderMails列表中的所有消息

不幸的是,当新邮件到达时,该函数被再次调用,它将复制目标文件夹中的所有邮件以及新邮件。

是否可以过滤诸如sourceFolderMails.Restrict(“所有主题和SentOn消息与列表不同”)之类的sourceFolderMails或其他仅复制新邮件的解决方案?

更多信息

每次收到新消息(触发ItemAdd事件)时,都会调用我的同步功能。我尝试对SourceFolderMails和destinationFolderMails项目容器使用两个嵌套的For Each item In items,比较SubjectSentOn属性。它可以工作,但是SentOn比较会导致宏将执行时间从不到一秒增加到30秒以上,这是不可行的,因为我必须检查多达六个共享邮件文件夹。 (Subject比较不会影响执行时间,而其他属性,例如Size会影响执行时间,这就是为什么我正在寻找其他方法来过滤检索到的邮件列表的原因,例如使用{{1 }})。

更新

考虑到可以比较一些MailItem属性,而不会影响执行时间(至少Subject和EntryID),可以在复制的邮件上复制原始项目EntryID(因为在邮件复制后更改)可能的解决方案

items.Restrict(filter)

可以添加一个自定义属性,然后将其与原始EntryID进行比较

Dim objCopy As Outlook.MailItem
Dim EntryID2Property As Outlook.UserProperty

Set objCopy = sourceFolderMail.Copy
Set EntryID2Property = objCopy.UserProperties.Add("EntryID2", olText)
EntryID2Property.Value = sourceFolderMail.EntryID
objCopy.Save
objCopy.Move destinationFolder

不幸的是,自定义属性比较与SendOn一样慢。 在与原始邮件进行比较之后,我一直在寻找检测复制邮件的最佳方法。

1 个答案:

答案 0 :(得分:0)

您可以在源文件夹上使用Items.ItemAdd事件来复制通过事件处理程序的项目。

当新消息到达源文件夹时,您的代码当然必须正在运行。