通过Microsoft Graph API订阅接收邮件时,如何获取Immutable Id?
解决Microsoft Graph API获取收件邮件Immutable Id的问题
一、正确通过GET Message API获取Immutable Id
你之前调用GET message时没拿到Immutable Id,大概率是请求头的使用方式有误。正确操作是:
- 在请求中添加完整的
Prefer请求头:Prefer: IdType="ImmutableId",注意引号是英文双引号,不能省略或替换。 - 此时API返回的邮件对象中,
id字段的值就是该邮件的Immutable Id,而非额外新增字段。不管是获取单封邮件(GET /me/messages/{id})还是邮件列表(GET /me/mailFolders('inbox')/messages),只要带上这个头,返回的所有id都会是Immutable格式。
二、通过订阅直接获取收件邮件的Immutable Id
如果想在订阅通知中直接拿到Immutable Id,不需要后续额外调用API,只需在创建订阅时添加相同的Prefer请求头:
创建订阅的请求示例
POST https://graph.microsoft.com/v1.0/subscriptions Prefer: IdType="ImmutableId" Content-Type: application/json { "changeType": "created", "notificationUrl": "https://your-notification-endpoint.com", "resource": "/me/mailFolders('inbox')/messages", "expirationDateTime": "2024-05-20T18:23:45.9356913Z", "clientState": "your-client-secret" }
创建成功后,当有新邮件进入收件箱时,你收到的通知 payload 里,resourceData.id字段的值就是该邮件的Immutable Id,直接存入数据库即可用于后续回复操作。
三、已存在订阅的补救方案
如果已经创建了订阅且无法重新创建,收到通知后可以用通知里的普通Id,调用GET /me/messages/{普通Id}并带上Prefer: IdType="ImmutableId"头,获取对应的Immutable Id后再存入数据库。
内容的提问来源于stack exchange,提问作者nilesh
相关产品推荐
相关产品推荐

