从 Exchange 获取 Outlook 项目的附件

Office JavaScript API 包括用于从 Outlook 中的邮件和约会中获取附件及其内容的 API。 下表列出了这些附件 API、它们运行的 Outlook 模式,以及它们需要操作的最低邮箱要求集。

API 支持的 Outlook 模式 最低要求集
Office.context.mailbox.item.attachments 阅读 1.1
Office.context.mailbox.item.getAttachmentsAsync 撰写 1.8
Office.context.mailbox.item.getAttachmentContentAsync 阅读
撰写
1.8

如果运行加载项的 Outlook 客户端不支持所需的最低要求集,则可以直接从 Exchange 获取附件及其内容。 选择适用的 Exchange 环境的选项卡。

在Exchange Online环境中,外接程序必须执行以下步骤才能直接从 Exchange 获取附件。

  1. 获取 Microsoft Graph 的访问令牌。
  2. 获取适用邮件或约会的项目 ID。
  3. 使用 Microsoft Graph 获取附件及其属性。

以下各节介绍了每个步骤。

获取访问令牌

Microsoft Graph 提供对用户的 Outlook 邮件数据的访问权限。 外接程序必须先获取访问令牌,然后才能从 Microsoft Graph 获取数据。 若要获取访问令牌,请使用嵌套应用身份验证 (NAA) 。 若要详细了解 NAA,请参阅 使用嵌套应用身份验证在 Office 外接程序中启用 SSO (预览版)

获取邮件项的项目 ID

若要使用 Microsoft Graph 获取有关附件的信息,需要包含附件的邮件或约会的项目 ID。 使用适用的 Office JavaScript API 获取项目 ID。

  • 读取模式:调用 Office.context.mailbox.item.itemId。 在非移动 Outlook 客户端上,由于此属性返回为 Exchange Web Services (EWS) 格式化的 ID,因此必须使用 Office.context.mailbox.convertToRestId 方法将 ID 转换为 Microsoft Graph 可以使用的 REST 格式。

    // Get the item ID of the current mail item in read mode and convert it into a REST format.
    const itemId = Office.context.mailbox.item.itemId;
    const restId = Office.context.mailbox.convertToRestId(itemId, Office.MailboxEnums.RestVersion.v2_0);
    
  • Compose模式:获取项目 ID 的方法因邮件项目是否已另存为草稿而异。

    • 如果已保存该项目,请调用 Office.context.mailbox.item.getItemIdAsync

      // Get the item ID of the current mail item being composed.
      Office.context.mailbox.item.getItemIdAsync((result) => {
          if (result.status === Office.AsyncResultStatus.Failed) {
              console.error(result.error.message);
              return;
          }
      
          const itemId = result.value;
      });
      

      提示

      方法 getItemIdAsync 已在邮箱要求集 1.8 中引入。 如果运行加载项的 Outlook 客户端不支持 Mailbox 1.8,请改用 Office.context.mailbox.item.saveAsync ,因为邮箱 1.3 中引入了此方法。

    • 如果尚未保存该项目,请调用 Office.context.mailbox.item.saveAsync 启动保存并获取项目 ID。

      // Save the current mail item being composed to get its ID.
      Office.context.mailbox.item.saveAsync((result) => {
          if (result.status === Office.AsyncResultStatus.Failed) {
              console.error(result.error.message);
              return;
          }
      
          const itemId = result.value;
      });
      

      注意

      如果 Outlook 客户端处于缓存模式,则保存的项目可能需要一些时间才能同步到服务器。 在项目同步之前,使用项 ID 将返回错误。

使用 Microsoft Graph

获取包含附件的邮件项目的访问令牌和项目 ID 后,现在可以发出Microsoft Graph 请求。 有关如何使用 Microsoft Graph 获取附件的信息和示例,请参阅 获取附件

另请参阅