【问题标题】:Office.js Outlook add-in InternetHeaders Prefer ImmutableIdOffice.js Outlook 加载项 InternetHeaders 首选 ImmutableId
【发布时间】:2019-10-04 01:33:29
【问题描述】:

我正在开发 Outlook 加载项(使用 dotnet 核心后端进行反应)。我想利用邮件消息的不可变 ID。 This page

更新(2019 年 1 月 15 日):此功能现已在 Microsoft Graph v1.0 和测试版中作为“选择加入”提供。默认情况下,Graph 将继续返回常规 ID。

因此,为了访问此功能,我需要在 API 请求中发送 HTTP 标头:

Prefer: IdType="ImmutableId"

有一个 API 可以做到这一点:

Office.context.mailbox.item.internetHeaders.setAsync({"Prefer": "IdType=\"ImmutableId\""});

在用于撰写消息的 React 组件中,在 componentDidMount() 方法中请求成功,但不会生成 ImmutableId [已编辑 - setAsync() 方法仅可用于撰写消息]。在写问题的过程中,我在this page找到了答案:

您需要采取一些额外的步骤才能完成更新。在加载项 HTML 页面的 head 标记中,注释掉或删除任何现有的 office.js 脚本引用,并引用更新后的 JavaScript API for Office 库,如下所示:

<script src="https://appsforoffice.microsoft.com/lib/1/hosted/Office.js" type="text/javascript"></script>

CDN URL 中 office.js 中的 /1/ 指定使用 Office.js 版本 1 中的最新增量版本。

我已经使用更新的脚本参考更新了taskpane.html 文件,但请求仍然失败 - id 永远不会不可变,即使标头设置成功,itemId 只是标准的 volatile id,当项目在文件夹之间移动。是否有成功使用此功能的示例?

【问题讨论】:

  • Office.context.mailbox.item.internetHeaders 用于处理电子邮件 MIME 标头。它与 REST ImmutableId 标头无关。当前 Outlook 加载项不支持不可变 ID。你的场景是什么?您是否主要对通过 Outlook 插件获取项目的不可变 ID 感兴趣?
  • 是的,我正在尝试为 Outlook 加载项的邮件项获取不可变 ID。

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


【解决方案1】:

第一个文档描述了在调用 Microsoft Graph 或 Exchange REST API 时要设置的 HTML 标头。这对您以后可能很重要,具体取决于您如何使用 id。

要获取 Outlook 项目的不可变 ID:

  1. Office.context.mailbox.item.itemId 获取 EWS 项目 ID
  2. translateExchangeIds REST API 进行远程服务调用,以将 REST id 换成不可变的 ID

这是一个关于如何从 Outlook 加载项调用 REST API 的不完整示例。它缺少访问令牌,因为 translateExchangeIds REST API 需要 User.ReadBasic 权限,这不是 getClientAccessToken API 返回的令牌范围。这个简短的示例基于making REST API calls from an Outlook add-in 文章,其中包含有关发出其他类似请求的更多信息。

var accessToken = "" // Need access token with User.ReadBasic or greater permissions
var itemIdFormat = "ewsId";

var translateExchangeIdsUrl = Office.context.mailbox.restUrl +
    '/v2.0/me/translateExchangeIds/';

$.ajax({
    type: 'POST',
    url: translateExchangeIdsUrl,
    data: JSON.stringify({
        InputIds : [
            Office.context.mailbox.item.itemId
        ],
        "SourceIdType": itemIdFormat,
        "TargetIdType": "restImmutableEntryId"
    }),
    contentType: 'application/json',
    dataType: 'json',
    processData: false,
    headers: { 'Authorization': 'Bearer ' + accessToken }
}).done(function(result){
    console.log(result);
}).fail(function(error){
    console.error(error);
});

您还可以在 Outlook 加载项 UserVoice 上为客户端不可变 ID API 创建功能请求。我们在规划过程中会考虑 UserVoice 上的功能请求。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
相关资源
最近更新 更多