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

使用Microsoft Graph API代发邮件遇400错误请求问题求助

解决应用级Mail.Send权限调用/me/sendmail返回400认证错误的问题

嘿,这个问题我之前帮同事排查过,核心原因其实很直白——应用级权限和/me端点根本不兼容!

为什么会触发这个错误?

/me是Graph API里的「用户上下文专属端点」,它需要依赖当前请求绑定的用户身份来确定操作对象。但你用的是应用级权限,这种权限是让应用本身拥有独立的操作权限,不需要绑定到某个具体用户的会话,所以Graph完全不知道/me指代的是谁,自然就抛出了认证错误。

快速修复步骤

  1. 替换请求端点
    把/me/sendmail改成指定用户的端点,格式如下:

    https://graph.microsoft.com/v1.0/users/{目标用户ID或用户主体名}/sendmail
    

    比如你要代表管理员admin@yourdomain.com发邮件,就用:

    https://graph.microsoft.com/v1.0/users/admin@yourdomain.com/sendmail
    
  2. 规范请求体参数
    你的请求里saveToSentItems用了字符串"false",虽然Graph偶尔能兼容,但严格来说应该用布尔值false,避免不必要的解析问题。

  3. 再次验证权限配置
    去Azure AD应用注册里确认两个关键点:

    • 已经添加了应用类型的Mail.Send权限(不是委派权限)
    • 已经完成了管理员同意(应用级权限必须经过管理员同意才能生效)

修正后的完整请求示例

POST https://graph.microsoft.com/v1.0/users/admin@yourdomain.com/sendmail
Content-Type: application/json

{
  "message": {
    "subject": "first mail",
    "body": {
      "contentType": "Text",
      "content": "commented commmented"
    },
    "toRecipients": [{
      "emailAddress": {
        "address": "Alex@*******"
      }
    }]
  },
  "saveToSentItems": false
}

额外排查点

如果还是报错,可以解码你的访问令牌(用本地工具或离线解码方式)检查:

  • aud字段是不是https://graph.microsoft.com(确保令牌是发给Graph API的)
  • roles字段里有没有Mail.Send(确认权限已经正确包含在令牌中)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:46:42