每当邮箱中有未读邮件时,如何制作 outlook 宏 运行?

How can I make an outlook macro run whenever a unread item is in the mailbox?

所以,我目前正在开发一个脚本,它可以接收电子邮件并以某种方式处理它们。我希望它在没有任何人为干预的情况下完全自动工作,在大多数情况下我已经做到了。

我遇到的问题是,如果邮箱在 outlook 关闭时收到一封电子邮件,由于该电子邮件,我无法启动程序。如果我使用

Private Sub Application_Startup() 'Runs at application start
    Call ProcessCode
End Sub

那么运行太早了,消息还没有收到,所以无法处理。

我试过了

Private Sub Application_NewMail() 'Runs whenever a new mail item is recieved
    Call ProcessCode
End Sub

但出于某种原因,在这种情况下 运行 不会这样(正常接收邮件时 运行s)

我也试过 Application_ItemLoadApplication_MAPILogonComplete 但这些似乎都不起作用。

我最理想的是 运行 每当邮箱中出现未读邮件时,无论它是如何到达那里的,都使用代码。

提前致谢

亚历克斯·斯派塞

您可以考虑使用计时器定期检查未读邮件。请参阅具有 "[UnRead] = true" 条件的项目 class 的 Outlook VBA - Run a code every half an hour for more information. In the timer's tick event you can get all unread email using the Find/FindNext or Restrict 方法。在以下文章中阅读有关这些方法的更多信息:

我还建议处理 NewMailEx 事件而不是 NewMail 事件。

对于每个收到的由 Microsoft Outlook 处理的项目,此 NewMailEx 事件都会触发一次。该项目可以是多种不同项目类型中的一种,例如 MailItem、MeetingItem 或 SharingItem。 EntryIDsCollection 字符串包含对应于该项目的条目 ID。请注意,当 EntryIDCollection 包含自上次触发事件以来收件箱中收到的所有项目的逗号分隔条目 ID 列表时,此行为已从事件的早期版本发生变化。

NewMailEx 事件在新邮件到达收件箱时且在客户端规则处理发生之前触发。您可以使用 EntryIDCollection 数组中返回的条目 ID 来调用 NameSpace.GetItemFromID 方法并处理该项目。请谨慎使用此方法,以尽量减少对 Outlook 性能的影响。但是,根据客户端计算机上的设置,在新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步发生。您不应该假设在这些事件触发后,收件箱中的项目数量总是会增加一个项目。