如何通过MS Graph API读取Outlook账号邮件的完整头部信息
解决方案
完全可以通过Microsoft Graph API获取邮件完整头部,默认返回报文不会携带该字段,你需要通过$select参数手动指定返回internetMessageHeaders属性即可。
调整后的请求端点
你可以使用如下格式的请求,保留原有返回字段的同时追加完整邮件头:
https://graph.microsoft.com/v1.0/me/mailFolders/{folderid}/messages/?$orderby=sentDateTime&$select=*,internetMessageHeaders
- 其中
*代表保留接口默认返回的所有字段,避免丢失你原先用到的subject、sentDateTime、body等属性 - 追加的
internetMessageHeaders就是对应完整邮件头的属性字段
返回结构说明
调整请求后,返回的每一条message对象中会新增internetMessageHeaders数组,数组内每个元素为name(头名称)和value(头值)的键值对,等效于javax.mail API中getAllHeaders()返回的全部内容,示例结构如下:
{ "value": [ { // 原有返回的id、subject、body等字段保持不变 "internetMessageHeaders": [ { "name": "Received", "value": "from MAZPR01MB5442.INDPRD01.PROD.OUTLOOK.COM ([fe80::xxxx:xxxx:xxxx:xxxx]) by MAZPR01MB5442.INDPRD01.PROD.OUTLOOK.COM with HTTPS; Mon, 2 Aug 2021 12:47:39 +0000" }, { "name": "X-MS-Exchange-Organization-SenderIdResult", "value": "None" } // 其余所有自定义/标准邮件头 ] } ] }
补充说明
- 该属性在Graph API v1.0版本已正式支持,无需调用beta端点
- 所需权限和原有读取邮件的权限一致,仅需
Mail.Read或更高的邮件读取权限即可,无需额外申请权限 - 单条邮件查询也适用该规则,请求格式为
https://graph.microsoft.com/v1.0/me/messages/{messageId}?$select=*,internetMessageHeaders
内容的提问来源于stack exchange,提问作者Dharma
相关产品推荐
相关产品推荐

