You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取Microsoft Graph API中.eml邮件附件所需权限及方案咨询

解决Outlook .eml附件获取内容的问题

问题原因

.eml格式的附件属于项目附件(item attachment),而非普通的文件附件,因此调用/users/{user_id}/messages/{message_id}/attachments接口时,返回结果中不会包含contentBytes字段,这类附件需要通过专门的端点获取内容。

所需权限

获取.eml附件内容需要配置以下权限之一(根据应用类型选择):

  • 委派权限:Mail.Read 或 Mail.ReadWrite(需用户登录授权,适用于客户端应用)
  • 应用权限:Mail.Read 或 Mail.ReadWrite(需管理员同意,适用于后台服务类应用)

注意:要确保在Azure AD应用注册中已添加对应权限并完成授权(应用权限需管理员审批)。

可行获取方法

方法1:调用附件专属的$value端点

  1. 先调用/users/{user_id}/messages/{message_id}/attachments接口,获取目标.eml附件的id;
  2. 使用该id调用/users/{userId}/messages/{message_id}/attachments/{attachment_id}/$value接口,直接获取.eml文件的二进制内容。

对应msgraph-sdk-php的代码示例:

// 假设已初始化好$graphClient
$userId = "目标用户ID";
$messageId = "目标邮件ID";
$attachmentId = ".eml附件的ID";

// 获取.eml附件内容
$emlContent = $graphClient->users()
    ->byUserId($userId)
    ->messages()
    ->byMessageId($messageId)
    ->attachments()
    ->byAttachmentId($attachmentId)
    ->content()
    ->get();

// 保存到文件或处理内容
file_put_contents("attachment.eml", $emlContent);

方法2:通过嵌套邮件对象获取内容

由于.eml附件本质是嵌套的邮件,也可以调用/users/{userId}/messages/{message_id}/attachments/{attachment_id}/item接口获取嵌套邮件的详情,再根据需求提取内容。不过此方法返回的是邮件JSON结构,如需完整.eml文件,方法1更直接。

权限错误排查

你之前调用/users/{userId}/messages/{message_id}/$value出现403,大概率是因为调用了错误的端点(该端点是获取原邮件的.eml内容,而非附件的)。确认使用上述附件专属的$value端点,并检查权限是否正确配置及授权完成。

内容的提问来源于stack exchange,提问作者MalcolmInTheCenter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:08:17