Outlook宏/ VBA比较FROM和REPLY TO地址和警报如果不同?

时间:2015-08-05 13:58:47

标签: vba outlook-vba

这在Outlook 2013宏/ VBA中是否可行?我不知道从哪里开始。理想情况下,它会触发每个传入的电子邮件,并在FROM和REPLY TO地址不同时弹出警报。

2 个答案:

答案 0 :(得分:0)

您可以处理Application类的NewMailEx事件。

此事件会针对Microsoft Outlook处理的每个已接收项触发一次。该项可以是几种不同项类型之一,例如,MailItem,MeetingItem或SharingItem。 EntryIDsCollection字符串包含与该项对应的条目ID。

当新邮件到达收件箱时以及客户端规则处理发生之前,将触发NewMailEx事件。您可以使用EntryIDCollection数组中返回的条目ID来调用NameSpace.GetItemFromID方法并处理该项。

您也可以创建一个可以调用VBA子的规则。 sub应该如下所示:

 Public Sub Test(mail as MailItem)
  ' test
 End Sub

最后,您可能会发现Getting Started with VBA in Outlook 2010文章很有帮助。

答案 1 :(得分:0)

在ThisOutlookSession中添加以下代码 - 您需要更新收件箱位置或您正在观看的任何文件夹。
我不认为我用Item.Recipients查看了正确的属性 - 您需要找到回复。
收件人地址也可能无法始终显示正确的电子邮件地址 - 在互联网上搜索名为ResolveDisplayNameToSMTP

的功能

另外 - 我还没有测试过它。 :)

当您运行Application_StartUp例程或关闭并重新打开Outlook时,该过程将变为活动状态。

Dim WithEvents MyInboxFolder As Items

Private Sub Application_Startup()

    Dim ns As Outlook.NameSpace

    Set ns = Application.GetNamespace("MAPI")
    Set MyInboxFolder = ns.Folders.item("Mailbox - Darren Bartrup-Cook").Folders.item("Inbox").Items

End Sub

Sub MyInboxFolder_ItemAdd(ByVal item As Object)

    Dim sSenderEmailAddress As String
    Dim vReplyRecipient As Variant

    sSenderEmailAddress = item.SenderEmailAddress

    For Each vReplyRecipient In item.Recipients
        If vReplyRecipient.Address = sSenderEmailAddress Then
            MsgBox "The same"
        End If
    Next vReplyRecipient

End Sub

Private Sub Application_Quit()

    Dim ns As Outlook.NameSpace
    Set MyInboxFolder = Nothing
    Set ns = Nothing

End Sub

查找Eugene Astafiev提到的NewMailEx后的编辑 - 此事件会针对Microsoft Outlook处理的每个收到的项目触发一次 - 绝对值得深入研究,因为它会捕获所有文件夹,而不仅仅是收件箱中。