如何从 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..."
    } 
  ] 
}