【发布时间】:2020-02-04 08:52:36
【问题描述】:
我正在编写一个具有 React 前端和 dotnet 核心后端的 Office Outlook 加载项。我已使用 Graph API 设置订阅,以便在 SentItems 文件夹中出现新电子邮件时接收通知。我想将通知中的电子邮件与我存储在数据库中的信息相关联。
不幸的是,当电子邮件发送并从草稿文件夹移动到 SentItems 时,项目 ID 会发生变化,因此它对匹配没有用处。
当电子邮件在文件夹之间移动时,新的 ImmutableId 不会改变。我一直无法让 Office.js 库生成一个 ImmutableId,但是有一个 translateExchangeIds 方法,当给定电子邮件项目 ID 时将返回一个不可变 ID。
// convert to immutable
var translateRequest = new {
inputIds = new string [] { mailMessage.ItemId },
targetIdType = "restImmutableEntryId",
sourceIdType = "restId"
};
var immutableResponse = await graphClient.PostAsJsonAsync("me/translateExchangeIds", translateRequest);
var immutableId = await immutableResponse.Content.ReadAsStringAsync();
我可以使用该不可变 id 来通过 Graph 请求检索电子邮件:
await graphClient.GetAsync($"Users/cccccccc-dddd-eeee-ffff-ba0c52e56d99/Messages/AAkALgAAAAAAHYQDEapmEc2byACqAC-EWg0AQ-irLc2NFESKcGAhz1k_GBBDB5JMOwAA/
但是订阅通知返回的不可变 id 是同一消息的不同不可变 id。因此,无法将通知邮件消息与存储在我的数据库中的消息信息相匹配。因此,我仍然必须将自定义属性附加到消息中,以便将数据库条目与 SentItems 通知匹配。
有没有更好的方法来处理这个问题?
更新:我的理论是因为不可变 id 是在项目位于不同文件夹中时派生的?将项目 ID 转换为不可变 ID 时,项目仍位于草稿文件夹中。发生订阅通知时,该项目位于“已发送项目”文件夹中。以下响应来自使用不同不可变 ID 但标识相同消息的查询 - myId GUID 是附加到消息的自定义属性,用于将通知与存储在本地数据库中的消息信息相关联。
\"id\":\"AAkALgAAAAAAHYQDEapmEc2byACqAC-EWg0AQ-irLc2NFESKcGAhz1k_GAADB4INPAAA\",...,\"myId\":\"8baa904f-cf64-437c-878c-be4f71714aee\"
\"id\":\"AAkALgAAAAAAHYQDEapmEc2byACqAC-EWg0AQ-irLc2NFESKcGAhz1k_GAADB4INLwAA\",...,\"myId\":\"8baa904f-cf64-437c-878c-be4f71714aee\"
【问题讨论】:
-
您能否分享您收到的作为通知的一部分的 ID?您是否使用 translateExchangeIds api 进行相同的转换?
-
@Sivaprakash 查看更新
标签: microsoft-graph-api outlook-addin office-js office-addins outlook-web-addins