microsoft-graph-api - Microsoft Graph API 为同一邮件返回了不同的 threadID
问题描述
在我们的应用程序中,我们调用 Microsoft Graph API 来获取电子邮件标头数据。在对 api 的初始调用期间,我们收到了以下电子邮件的 conversationId 详细信息
{"conversationId":"AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk+h7byQ="}
几秒钟后,当我们对同一封电子邮件发出类似请求时,我们收到了不同的会话 ID
{"conversationId":"AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk_h7byQ="}
现在这里的期望是 conversationId 的值应该始终保持不变。在上述情况下,返回的 2 个 conversationId 的唯一区别是 '+' 被替换为 '_'
AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk+h7byQ=
AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk_h7byQ=
详细步骤:-
- 解析 owa 邮件 dom 以获取 conversationId
AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk+h7byQ=
- 使用这个 conversationId 我们调用 MS Graph API 并获取详细信息,包括我们作为主键存储在数据库中的 messageId
- 几分钟后,我们再次调用 MS Graph API,这次使用 messageId,作为响应,我们得到一个不同的 conversationId
AAQkADVhMzU1YWY5LWVkNGQtNGZjOC1hMjJmLTk0MzIxMGQzMzRhMQAQAA8kZ_w6rdxIsHkFk_h7byQ=
问题:-
+和_是否有可能互换
解决方案
您不应该假设 Exchange 标识符可以跨平台互换。多年来,Exchange 使用了大量不同的标识符格式。这可能是这里问题的症结所在。
有一些机制可以在它们之间进行转换,但我通常建议不要这样做,除非你别无选择。
我不确定您为什么/如何解析 OWS DOM,但坦率地说,我更惊讶的是标识符比我更接近,因为它没有按预期工作。如果您想从 OWA 中的 Graph 中提取消息,我会为此使用Outlook Web 加载项。加载项框架包括一个convertToRestId方法,该方法返回一个可用于 Microsoft Graph 的标识符:
function getItemRestId() {
if (Office.context.mailbox.diagnostics.hostName === 'OutlookIOS') {
// itemId is already REST-formatted
return Office.context.mailbox.item.itemId;
} else {
// Convert to an item ID for API v2.0
return Office.context.mailbox.convertToRestId(
Office.context.mailbox.item.itemId,
Office.MailboxEnums.RestVersion.v2_0
);
}
}
至于+
vs _
,这归结为编码格式。Base64 有多种风格。标准 在标准 Base64 中,第 62 个字符是+
,第 63 个字符是/
. 当您想在 URL 中使用 Base64 作为保留字符时,这会出现+
问题/
。为了解决这个问题,您需要一个 Base64 的 URL 安全变体。有几种这样的变体。最常见的是base64url(在RFC 4648-
中定义),它将第 62 个和_
第 63个交换出来。
推荐阅读
- azure - 天蓝色自动化帐户中的 sku.family 和 sku.capacity 属性可以传递哪些值
- python - Pandas:加入部分字符串匹配,如 Excel VLOOKUP
- java - Selenium @FindBy - 你什么时候使用 How?
- django - Django on_delete=CASCADE 不起作用,无法使用原始 SQL 删除父行
- python-3.x - 例外:布局必须是破折号组件或返回破折号组件的函数
- android - 在 espresso 测试中使用 MockWebServer 的调度程序来响应来自另一个模块的异步调用
- ios - 如何查看我的用户在哪些设备上的百分比?
- cloud-foundry - 关于 Pivotal Cloud Cache 的多个问题
- javascript - 移动到另一个列表时更改 div 的颜色
- vb.net - 如何获得自定义笔颜色?