使用Azure Graph API无法下载Outlook邮件的.eml格式附件
解决Azure Graph API获取Outlook EML附件无contentBytes字段的问题
问题原因
这是Graph API对附件类型的区分导致的:
- Excel这类普通文件属于fileAttachment类型,API会直接返回
contentBytes字段存储文件的Base64编码内容 - EML格式附件属于itemAttachment类型,它本质是嵌入的完整邮件项,因此API不会在附件列表接口中返回
contentBytes
解决方案
要获取EML附件的内容,需要针对该itemAttachment发起单独请求:
- 从附件列表中识别出类型为
#microsoft.graph.itemAttachment的附件(即你的EML附件),记录它的id - 调用以下Graph API端点获取该附件的原始内容:
GET /me/messages/{邮件ID}/attachments/{附件ID}/$value
(若操作其他用户邮箱,替换/me/为/users/{用户ID}/)
该请求会直接返回EML文件的原始字节流,可直接保存为.eml文件使用。
附件响应对比
- EML附件(itemAttachment)响应示例:
{ "@odata.context": "", "@odata.type": "#microsoft.graph.itemAttachment", "id": "AAMkAGYzZDI2Nj......", "lastModifiedDateTime": "2023-03-08T11:41:38Z", "name": "EML Test.eml", "contentType": "message/rfc822", "size": 71087, "isInline": false }
- 普通文件附件(fileAttachment)响应示例:
{ "@odata.type": "#microsoft.graph.fileAttachment", "@odata.mediaContentType": "application/vnd.ms-excel", "id": "AAMkAGYzZDI2N....", "lastModifiedDateTime": "2023-03-07T13:12:52Z", "name": "Admins-07-02-202311_24.xls", "contentType": "application/vnd.ms-excel", "size": 42778, "isInline": false, "contentId": "f_ley9tj8o0", "contentLocation": null, "contentBytes": "0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAMQAAAAAAAAAAEAAATwAAAAEAAAD+////AAAAADAAAAD////////////////////........" }
内容的提问来源于stack exchange,提问作者Amal Thachappilly
相关产品推荐
相关产品推荐

