【问题标题】:How to fetch email internet headers in an on-send add-in?如何在 on-send 加载项中获取电子邮件 Internet 标头?
【发布时间】:2022-10-23 18:20:07
【问题描述】:

我们有一个客户端要求在发送带有某些 Microsoft 信息保护/Azure 信息保护 (MSIP/AIP) 标签的电子邮件时执行操作。我们有一个桌面 Outlook 插件可以完美地做到这一点。

然而,现在客户正在请求相同的加载项,但使用的是新的现代风格 Outlook 加载项。我们创建了一个 on-send 加载项来完成此操作,但我们无法访问 Office.ComposeMessage 中的任何 Internet 标头。事实上,我们无法返回任何标题。

这是我们的代码:

async function fetchInternetHeaders(mailItem: Office.MessageCompose, 
                                    tags: string[]): Promise<string[]> {
  return new Promise(function(resolve, reject) {
    try {
      let myTags: string[] = [
        "msip_labels",  // This is the value we need
        "x-ms-has-attach", // This is for testing
        "PR_SUBJECT_W", // This is for testing
        "http://schemas.microsoft.com/mapi/proptag/0x0037001F", // test
        "http://schemas.microsoft.com/mapi/proptag/0x5D07001F", // test
        "http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/msip_labels/0x0000001F", // Another way to get msip_labels
      ];
      mailItem.internetHeaders.getAsync(myTags, function(asyncResult) {
        if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
          debug.Log("onSend.fetchInternetHeaders", "Selected headers: " + JSON.stringify(asyncResult.value));
        } else {
          debug.Log(
            "onSend.fetchInternetHeaders",
            "Error getting selected headers: " + JSON.stringify(asyncResult.error)
          );
        }
        resolve(["FetchedInternetHeaders"]);
      });
    } catch (error) {
      debug.Log("onSend.fetchInternetHeaders", "Error occurred", error);
      reject(error);
    }
  });

注意:我们忽略了参数“tags”以使一切尽可能简单。

调用成功,但返回的数组始终为空,即使对于电子邮件主题等简单属性也是如此。我们做错了什么?

【问题讨论】:

  • 发送消息时真的没有办法访问互联网标头吗?这对我们来说是一个严重的问题......有人可以提出另一种方法来做同样的事情吗?如果我们强制保存到 Drafts 文件夹并使用 Graph 来读取标题?

标签: outlook office-js outlook-addin office-addins outlook-web-addins


【解决方案1】:

在发送消息之前,COM 加载项和 Web 加载项都不提供任何 Internet 标头。您可能希望在将邮件放入“已发送邮件”文件夹时设置 Internet 标头,但在此之前它们不是由服务/传输提供商创建和标记的。

您很可能需要访问用户属性,请参阅 Outlook 对象模型中的 UserProperties 对象。但 Office JavaScript API (OfficeJS) 没有提供任何开箱即用的功能,您需要使用 EWS 或 Graph API 从 Web 加载项访问此类属性。

您可以使用CustomProperties 对象指定特定于用户邮箱中某个项目的数据。例如,您的邮件插件可以对某些邮件进行分类,并使用自定义属性 messageCategory 记录类别。或者,如果您的邮件加载项根据消息中的会议建议创建约会,您可以使用自定义属性来跟踪这些约会中的每一个。这可确保如果用户再次打开邮件,您的邮件插件不会提供第二次创建约会。

请注意,对自定义属性的更改存储在当前 Outlook 会话的属性的内存副本中。要确保这些自定义属性在下一个会话中可用,请使用 CustomProperties.saveAsync

这些特定于加载项、特定于项目的自定义属性只能通过使用 CustomProperties 对象来访问。就像我之前写的那样,这些属性不同于 Outlook 对象模型中基于 MAPI 的自定义UserProperties,以及 Exchange Web 服务 (EWS) 中的扩展属性。您不能使用 Outlook 对象模型、EWS 或 REST 直接访问 CustomProperties。要了解如何使用 EWS 或 REST 访问 CustomProperties,请参阅 Get custom properties using EWS or REST 部分。

您可以在技术社区上发布或投票支持现有的功能请求,当 Office 开发团队完成规划过程时会考虑这些请求。使用 github 标签:Type: product feature requesthttps://aka.ms/M365dev-suggestions

【讨论】:

    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 2016-08-19
    • 2016-07-08
    • 1970-01-01
    • 2015-05-24
    • 2020-11-23
    • 2013-01-26
    • 2014-02-14
    相关资源
    最近更新 更多