如何从 headers 获取可用的电子邮件消息引用 ID 以在 Microsoft Graph 查询中使用?
How do I get a usable email message reference id from headers to use in a Microsoft Graph query?
我正在尝试使用 Office 365 中转发电子邮件的电子邮件 header 中的引用邮件 ID,然后查找具有该邮件 ID 的原始电子邮件。
转发电子邮件的 header 中的参考 ID 将显示如下所示的内容。请注意,我通过使用 sender/subject 将 &$select=internetMessageHeaders
添加到我的查询以查找转发的电子邮件,从 Microsoft Graph 获取这些 headers。
{
"name": "References",
"value": "<CAOLK2SAEzvs=-6Rs5cTbgORNivQVK2AvMJDJT8o+ghx-XhCn7w@mail.gmail.com>"
}
但是,如果我接受它并在 https://graph.microsoft.com/v1.0/me/messages?$filter=internetMessageId eq '<CAOLK2SAEzvs=-6Rs5cTbgORNivQVK2AvMJDJT8o+ghx-XhCn7w@mail.gmail.com>'
这样的查询中使用它
我没有收到任何结果。
如果我使用发件人和主题在 Microsoft Graph 中查找原始电子邮件,我会看到原始电子邮件的 internetMessageId
字段如下:
{
"name": "Message-ID",
"value": "<CAOLK2SC6s9Me05kYRqeuEHKK8DrQbXx34ScT0AzGOFFLMdRapg@mail.gmail.com>"
}
有人知道 Office 365 或 Microsoft Graph 正在做什么以将 CAOLK2SAEzvs=-6Rs5cTbgORNivQVK2AvMJDJT8o+ghx-XhCn7w
更改为 CAOLK2SC6s9Me05kYRqeuEHKK8DrQbXx34ScT0AzGOFFLMdRapg
吗?它看起来像是某种编码,但我无法重现它。
最终,我希望能够转换我在参考 ID header 中获得的内容,这样我就可以转身并使用该 ID 使用 Microsoft Graph 查找原始电子邮件。
id
是一个散列值,除其他外,它包括邮件所在的 path/folder。因此,例如,如果您移动邮件(比如从收件箱到存档) 那么您应该期望 id
发生变化。
要跟踪邮件,无论其位置如何,您都应该使用 internetMessageId
($select=internetMessageId
) 属性。
我发现了这个问题。在我的测试消息 ID 中,我有字符 = 和 +
这些字符必须 URL 编码为 %3D 和 %2B,然后才能用于 $filter 查询。当它们被 URL 编码时,我可以使用 MS Graph 找到原始电子邮件。
在 Microsoft Graph v1.0 和测试版中,您可以通过在 API 请求中发送额外的 HTTP header 来获得 "immutable ids":
Prefer: IdType="ImmutableId"
我将不可变用斜体表示,因为这是 Microsoft 使用的术语。请注意以下注意事项,如果出现以下情况,ID 将会更改:
- 用户将项目移动到存档邮箱;
- 用户将项目导出(到 PST,作为 MSG 文件等)并 re-imports 到他们的邮箱;
- 用户创建了他们稍后发送的草稿;
您还可以通过以下请求将现有 ID 转换为不可变 ID:
POST https://graph.microsoft.com/beta/me/translateExchangeIds
{
"inputIds" :
[
"AQMkAGM2…"
],
"targetIdType" : "restImmutableEntryId",
"sourceIdType" : "restId"
}
哪个会给你回复:
HTTP 200 OK
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(microsoft.graph.convertIdResult)",
"value": [
{
"targetId": "AAkALgAA...",
"sourceId": "AQMkAGM2..."
}
]
}
我正在尝试使用 Office 365 中转发电子邮件的电子邮件 header 中的引用邮件 ID,然后查找具有该邮件 ID 的原始电子邮件。
转发电子邮件的 header 中的参考 ID 将显示如下所示的内容。请注意,我通过使用 sender/subject 将 &$select=internetMessageHeaders
添加到我的查询以查找转发的电子邮件,从 Microsoft Graph 获取这些 headers。
{
"name": "References",
"value": "<CAOLK2SAEzvs=-6Rs5cTbgORNivQVK2AvMJDJT8o+ghx-XhCn7w@mail.gmail.com>"
}
但是,如果我接受它并在 https://graph.microsoft.com/v1.0/me/messages?$filter=internetMessageId eq '<CAOLK2SAEzvs=-6Rs5cTbgORNivQVK2AvMJDJT8o+ghx-XhCn7w@mail.gmail.com>'
我没有收到任何结果。
如果我使用发件人和主题在 Microsoft Graph 中查找原始电子邮件,我会看到原始电子邮件的 internetMessageId
字段如下:
{
"name": "Message-ID",
"value": "<CAOLK2SC6s9Me05kYRqeuEHKK8DrQbXx34ScT0AzGOFFLMdRapg@mail.gmail.com>"
}
有人知道 Office 365 或 Microsoft Graph 正在做什么以将 CAOLK2SAEzvs=-6Rs5cTbgORNivQVK2AvMJDJT8o+ghx-XhCn7w
更改为 CAOLK2SC6s9Me05kYRqeuEHKK8DrQbXx34ScT0AzGOFFLMdRapg
吗?它看起来像是某种编码,但我无法重现它。
最终,我希望能够转换我在参考 ID header 中获得的内容,这样我就可以转身并使用该 ID 使用 Microsoft Graph 查找原始电子邮件。
id
是一个散列值,除其他外,它包括邮件所在的 path/folder。因此,例如,如果您移动邮件(比如从收件箱到存档) 那么您应该期望 id
发生变化。
要跟踪邮件,无论其位置如何,您都应该使用 internetMessageId
($select=internetMessageId
) 属性。
我发现了这个问题。在我的测试消息 ID 中,我有字符 = 和 +
这些字符必须 URL 编码为 %3D 和 %2B,然后才能用于 $filter 查询。当它们被 URL 编码时,我可以使用 MS Graph 找到原始电子邮件。
在 Microsoft Graph v1.0 和测试版中,您可以通过在 API 请求中发送额外的 HTTP header 来获得 "immutable ids":
Prefer: IdType="ImmutableId"
我将不可变用斜体表示,因为这是 Microsoft 使用的术语。请注意以下注意事项,如果出现以下情况,ID 将会更改:
- 用户将项目移动到存档邮箱;
- 用户将项目导出(到 PST,作为 MSG 文件等)并 re-imports 到他们的邮箱;
- 用户创建了他们稍后发送的草稿;
您还可以通过以下请求将现有 ID 转换为不可变 ID:
POST https://graph.microsoft.com/beta/me/translateExchangeIds
{
"inputIds" :
[
"AQMkAGM2…"
],
"targetIdType" : "restImmutableEntryId",
"sourceIdType" : "restId"
}
哪个会给你回复:
HTTP 200 OK
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(microsoft.graph.convertIdResult)",
"value": [
{
"targetId": "AAkALgAA...",
"sourceId": "AQMkAGM2..."
}
]
}