2017-10-11 35 views
0

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

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

问题:当Web服务转到交换服务器时,由于电子邮件仍在发送,因此未找到电子邮件。这里的问题在于可能依赖于各种因素的时间,例如电子邮件的大小,附件的大小,上网速度等。因此,在Outlook中有任何事件可以在电子邮件实际“发送”时触发,然后将调用Web服务。

+0

我相信你可以通过两步处理来完成它:在ItemAdd处理程序中,向MailItem.Send事件添加第二个处理程序,并将你的调用放到后一个webservice中。 – VBobCat

回答

0

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

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

相关问题