【问题标题】:Getting information from a message using an Outlook rule使用 Outlook 规则从邮件中获取信息
【发布时间】:2018-11-06 23:49:17
【问题描述】:
我正在使用带有两个电子邮件帐户的 Outlook 2016,并且我设置了一个规则来调用 VBA 脚本来处理其中一个帐户上的传入邮件。有没有办法使用 VBA 访问触发我正在使用的规则的电子邮件对象?
我需要的只是获取每封邮件的发件人电子邮件。
PS:我使用的是 POP3,而不是 Exchange。另外,我尝试过 Application_NewMail() 而不是规则,但它不起作用。
【问题讨论】:
标签:
vba
vbscript
outlook
outlook-2016
【解决方案1】:
当您将 VBA 宏子分配给规则时,它应该如下所示:
Public Sub Test(mail as MailItem)
' where mail is the object which triggered the rule
MsgBox mail.SenderEmailAddress
End Sub
因此,您可以开箱即用地获取发件人的电子邮件地址。
此外,作为 Outlook 规则的一种可能解决方法,您可以考虑处理 Application 类的 NewMailEx 事件,当收件箱中收到新项目时会触发该事件。
对于 Microsoft Outlook 处理的每个收到的项目,此事件都会触发一次。该项目可以是几种不同的项目类型之一,例如 MailItem 、 MeetingItem 或 SharingItem 。 EntryIDsCollection 字符串包含对应于该项目的条目 ID。请注意,当EntryIDCollection 包含自上次触发事件以来收件箱中收到的所有项目的逗号分隔条目 ID 列表时,此行为与早期版本的事件有所不同。
NewMailEx 事件在新邮件到达收件箱时以及在客户端规则处理发生之前触发。您可以使用EntryIDCollection 数组中返回的Entry ID 来调用NameSpace.GetItemFromID 方法并处理该项目。请谨慎使用此方法,以尽量减少对 Outlook 性能的影响。但是,根据客户端计算机上的设置,新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步发生。您不应假设在这些事件触发后,收件箱中的项目数量总是会增加一项。