使用Outlook web加载项记录传入和传出的电子邮件

使用Outlook web加载项记录传入和传出的电子邮件,outlook,vsto,exchangewebservices,Outlook,Vsto,Exchangewebservices,我有一个基于VSTO COM的Outlook外接程序,可在桌面Outlook上截取所有传入/传出的电子邮件,然后将电子邮件的详细信息保存到SQL数据库中。以下是我使用外接程序所采取步骤的简要说明: 拦截传入/传出电子邮件,并在电子邮件上添加自定义GUID作为用户属性 在云上调用我的自定义Web API的端点,并发送一个包含详细信息的XML,如GUID(保存在上面)和其他与邮件相关的ID和详细信息 API端点将详细信息保存到SQL数据库中,并将响应返回给Outlook,以便Outlook不会冻结

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

  • 拦截传入/传出电子邮件,并在电子邮件上添加自定义GUID作为用户属性
  • 在云上调用我的自定义Web API的端点,并发送一个包含详细信息的XML,如GUID(保存在上面)和其他与邮件相关的ID和详细信息
  • API端点将详细信息保存到SQL数据库中,并将响应返回给Outlook,以便Outlook不会冻结
  • windows服务在后台运行,监视此SQL数据库中的电子邮件项目,并对Exchange或Office 365进行Web API调用,以使用GUID用户属性查找电子邮件,然后在需要时将其保存
  • 我无法通过VSTO加载项的API调用直接保存电子邮件,因为API中存在一些自定义耗时逻辑,因此我无法将Outlook冻结一段时间


    是否可以使用较新的Outlook Web加载项创建类似的内容

    有点-您可以拦截传出消息,但如果拦截,您的加载项将无法在应用商店中发布


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

    有点-您可以拦截传出消息,但如果拦截,您的加载项将无法在应用商店中发布

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