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

Graph SDK O365获取邮件MIME内容返回空JSON问题求助

问题描述

我按照O365 Graph SDK文档获取邮件的MIME内容,用于保存为EML文件到Blob存储。使用以下代码请求共享邮箱邮件的MIME内容:

return $graphSdk->createRequest('GET', sprintf('/users/%s/messages/%s/$value', $this->config['from_email'], $message->id))
    ->setReturnType(MimeContent::class)
    ->execute();

遇到以下问题:

  • 该请求始终返回空JSON响应,即使在Graph Explorer中测试也是如此;修改邮件ID会抛出400错误(提示无效ID),说明当前ID是正确的
  • 尝试另一个端点/users/{id | userPrincipalName}/mailFolders/{id}/messages/{id}/$value,返回:

The OData request is not supported

  • 移除URI中的/$value后,能正常获取邮件内容,但无法获取MIME内容
  • 已在PHP SDK的Issue中跟踪该问题,不确定是否与SDK相关,寻求解决思路
解决思路
  • 检查邮件状态:确认目标邮件不是草稿、已删除或处于特殊状态,这类邮件可能没有完整的MIME内容
  • 修正SDK的返回类型处理:/$value端点返回的是原始的MIME文本内容(不是JSON格式的MimeContent对象),设置setReturnType(MimeContent::class)会导致SDK尝试解析JSON失败,返回空。改为直接获取原始响应内容:
    $response = $graphSdk->createRequest('GET', sprintf('/users/%s/messages/%s/$value', $this->config['from_email'], $message->id))
        ->execute();
    $mimeContent = (string) $response->getBody();
    return $mimeContent;
    
  • 验证权限配置:确保授权的Token包含Mail.Read权限(委托权限或应用权限均可);如果是应用权限,需在Azure AD中确认应用已被授予访问该共享邮箱的权限
  • Graph Explorer测试注意事项:测试时切换到「原始响应」视图查看内容,默认的JSON视图会因为返回的是纯文本而显示为空
  • 使用正确的端点:获取MIME内容的标准端点为/users/{user-id}/messages/{message-id}/$value,通过mailFolders路径添加/$value的方式不被Graph API支持,应避免使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:05:27