不是为每个邮件触发NewMailEx事件

本文关键字:NewMailEx 事件 | 更新日期: 2023-09-27 18:13:12

我正在开发一个应用程序,我需要在其中读取传入邮件的内容(邮件正文)。为此,我使用下面的代码在每次收到新邮件时触发事件-

outLookApp.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(MailExtractor.outLookApp_NewMailEx);

但是NewMailEx事件没有触发几封邮件。当两封或三封邮件同时到达时,它似乎不会开火。理论上,它应该为每封进入MS Outlook收件箱的邮件触发。我用的是MS Outlook 2010。

我如何确保触发NewMailEx事件的每一个邮件来了?

不是为每个邮件触发NewMailEx事件

根据文档"此事件(NewMailEx)传递自上次事件触发以来收件箱中收到的所有项目的条目id列表"。但如果你测试了它,它没有,那就算数了。

使用ItemAdd不是最好的选择,因为它也可能不会对每封邮件都触发,正如你可以在文档中看到的那样。这也适用于每个文件夹,所以如果用户有服务器规则,将邮件移动到不同的文件夹,你将需要处理多个文件夹。

我对类似需求的解决方案是使用Redemption库,其中Store类具有OnMessageCreatedEx事件,该事件在Store中创建的每个项目上触发

这篇文章现在有点老了,但我遇到了同样的问题。尽管NewMailEx似乎比NewMailItems.ItemsAdd更可靠,但正如文档所述,当多个消息同时传入时,它仍然不可靠。

似乎有一个免费的插件(MAPI Store Accessor)可以更好地处理多个发送/接收事件,但是在通知之前可能会有很长的延迟(长达30分钟)。

如果这对你来说是不可接受的,请查看Outlook NewMail事件:解决方案选项中有一篇关于如何推出自己更可靠的解决方案的好文章。