如何使用Microsoft Graph API读取作为附件的邮件中的附件
解决方案:使用Microsoft Graph API读取嵌套邮件附件
核心实现逻辑
你之前只读取MIME内容只能拿到附属邮件的正文结构,无法直接提取嵌套附件,需要按嵌套邮件的类型选择对应处理方案,具体操作步骤如下:
操作步骤
步骤1:识别原始邮件中的嵌套邮件附件
首先调用接口拉取原始邮件的所有附件,筛选出目标附属邮件:
- 接口请求示例:
GET https://graph.microsoft.com/v1.0/me/messages/{原始邮件ID}/attachments?$select=id,name,contentType,@odata.type - 筛选规则:如果返回的附件
@odata.type为#microsoft.graph.itemAttachment且关联的item类型为message,或者是后缀为.eml的#microsoft.graph.fileAttachment,即为你需要读取的嵌套附属邮件。
步骤2:提取嵌套邮件的附件
根据嵌套邮件的类型选择对应处理方式:
- 如果是itemAttachment类型的邮件附件:直接调用扩展接口拉取附属邮件的附件列表,不需要单独解析MIME内容
接口请求示例:GET https://graph.microsoft.com/v1.0/me/messages/{原始邮件ID}/attachments/{附属邮件的附件ID}/?$expand=microsoft.graph.itemAttachment/item(expand=attachments)
接口返回结果中item/attachments字段即为附属邮件包含的所有附件。 - 如果是fileAttachment类型的.eml文件:先调用接口拉取.eml文件的完整二进制内容,再用本地MIME解析库(比如Python的email标准库、Java的Apache Commons Email等)解析.eml文件结构,提取其中的附件内容。
注意事项
- 调用接口前需要确保应用已申请
Mail.Read或更高的邮件读取权限,权限需要租户管理员授权后生效 - 嵌套邮件大小超过4MB时,需要先创建附件下载会话拉取完整内容,避免触发接口大小限制报错
- 解析.eml文件时注意区分多部分MIME结构中的内嵌资源和独立附件,避免漏读内容
内容的提问来源于stack exchange,提问作者pixelbyaj
相关产品推荐
相关产品推荐

