首页 > 解决方案 > 使用 Outlook Web 加载项记录传入和传出电子邮件

问题描述

我有一个有效的基于 VSTO COM 的 Outlook 加载项,它拦截桌面 Outlook 上的所有传入/传出电子邮件,然后用于将电子邮件的详细信息保存到 SQL 数据库中。下面是我使用加载项所采取的步骤的简要说明:

  1. 拦截传入/传出电子邮件并将自定义 GUID 添加为电子邮件上的用户属性
  2. 调用云上我的自定义 Web API 的端点并发送一个 XML,其中包含 GUID(保存在上面)和其他与邮件相关的 ID 和详细信息等详细信息
  3. API 端点将详细信息保存到 SQL 数据库中,并将响应返回给 Outlook,这样 Outlook 就不会冻结
  4. Windows 服务在后台运行并监视此 SQL 数据库中的电子邮件项目,并对 Exchange 或 Office 365 进行 Web API 调用,以使用 GUID 用户属性查找电子邮件,然后将其保存在需要的位置。

我无法通过 VSTO 加载项的 API 调用直接保存电子邮件,因为 API 中发生了一些自定义的耗时逻辑,因此我无法让 Outlook 在这段时间内保持冻结状态。

是否可以使用较新的 Outlook Web 插件创建类似的内容?

标签: outlookvstoexchangewebservices

解决方案


有点 - 您可以拦截传出消息,但如果这样做,您的插件将没有资格在商店中发布。

在 VSTO 插件中它仍然容易得多。您无法从辅助线程访问 Outlook 对象模型,但您仍然可以运行执行其他操作的代码。完成后,您可以通过打开需要通过在启动辅助线程之前保存的条目 id 处理的消息来访问主线程上的 OOM。请注意,无法从辅助线程访问各种对象是 OOM 特定的 - 可以从辅助线程访问扩展 MAPI 对象,但扩展 MAPI 需要 C++ 或 Delphi。在其他语言(包括所有 .Net 语言)中,您可以使用Redemption及其RDO对象系列 - 您只需将属性值保存Application.Session.MAPIOBJECT在专用变量中,然后在辅助线程上创建RDOSession的实例对象并将其 MAPIOBJECT 属性设置为您保存在主线程上的变量(有关更多详细信息,请参见http://www.dimastr.com/redemption/faq.htm#Threads)。


推荐阅读