Oulook加载项电子邮件已发送或已接收事件

时间:2017-10-11 18:40:39

标签: vb.net web-services outlook outlook-addin

要求:我创建了一个Outlook加载项,用于调用带有电子邮件entryid和其他信息的Web服务。接收呼叫的Web服务将转到Exchange服务器并查找此邮件项。在查找邮件项目时,Web服务将在我们的自定义数据库中存储附件和其他与电子邮件相关的字段。

解决方案:Outlook加载项具有接收MailItem对象的ItemAdd事件。然后,它将自定义GUID与邮件项目对象相关联并保存。然后,它使用这些参数和文件夹entryid调用Web服务。

问题:当网络服务进入Exchange服务器时,由于电子邮件仍在发送,因此找不到电子邮件。这里的问题是时间可能取决于各种因素,如电子邮件的大小,附件的大小,互联网速度等。因此,当电子邮件实际上是" SENT"然后加载项将调用Web服务。

1 个答案:

答案 0 :(得分:0)

这是预期的 - 当Outlook发送邮件时,它会将其上传到Exchange服务器,并将其移动到(本地)“已发送邮件”文件夹,这会导致Items.ItemAdd事件触发。但是,不能保证该消息将在已发送邮件文件夹的服务器(在线)版本中 - 这将在服务器发送它之后(很多)发生。这通常需要几秒钟。

在将消息的条目ID发送到Web服务器时引入延迟,或者在已发送邮件文件夹的联机版本上处理ItemAdd事件。您可以通过在线模式打开文件夹(IMsgStore :: OpenEntry(...,MAPI_NO_CACHE),使用扩展MAPI(C ++或Delphi),然后从IMAPIFolder :: GetContentsTable返回的文件夹内容表中处理IMAPITable事件)或使用Redemption在在线模式下重新打开该文件夹 - 致电RDOSessionGetFolderFromID(..., MAPI_NO_CACHE)