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

Posted

技术标签:

【中文标题】Outlook 加载项电子邮件发送或接收事件【英文标题】:Oulook Add-In email sent or received event 【发布时间】:2017-10-11 18:40:39 【问题描述】:

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

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

问题:当网络服务转到交换服务器时,由于电子邮件仍在发送中,因此找不到电子邮件。这里的问题是时间可能取决于各种因素,如电子邮件大小、附件大小、互联网速度等。所以 Outlook 中是否有任何事件可以在电子邮件实际“发送”时触发,以便添加-然后 in 将调用 Web 服务。

【问题讨论】:

我相信您可以通过两步处理来做到这一点:在ItemAdd 处理程序上,将第二个处理程序添加到MailItem.Send 事件,然后在后者中调用网络服务。跨度> 【参考方案1】:

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

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

【讨论】:

以上是关于Outlook 加载项电子邮件发送或接收事件的主要内容,如果未能解决你的问题,请参考以下文章

Outlook邮件接收和发送服务器设置

Outlook邮件接收和发送服务器设置

outlook无法连接到exchange服务器怎么办

Outlook 加载项:获取所选会议的与会者电子邮件地址

Outlook邮件接收和发送服务器设置

Powershell 脚本无法使用任务计划程序通过 Outlook 发送电子邮件