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

使用Laravel调用Microsoft Graph API发邮件时遇内部服务器错误

解决Laravel调用Microsoft Graph API发送邮件时的内部服务器错误

核心问题排查与修复

1. 避免手动JSON编码,利用Laravel Http客户端自动处理

你当前代码里手动用json_encode($emailData)作为POST参数,但Laravel的Http::post()会自动把数组转成JSON格式,还会自动设置Content-Type: application/json请求头。手动编码会导致双重JSON编码,这是触发内部服务器错误的常见原因。

修正后的请求代码:

$response = Http::withToken($this->token)
    ->post("https://graph.microsoft.com/v1.0/users/test@hotmail.com/sendMail", $emailData);

2. 移除不必要的from字段

Microsoft Graph的sendMail接口默认用令牌对应的用户作为发件人,手动指定from字段容易引发权限冲突(除非你的令牌拥有代表其他用户发邮件的权限,比如Mail.Send.Shared或应用权限)。如果你的令牌是test@hotmail.com用户的委托令牌,直接去掉from节点即可:

修正后的$emailData:

$emailData = [
    "message" => [
        "subject" => 'Test', 
        "body" => [
            "contentType" => "text", 
            "content" =>  "Test Email!"
         ], 
        "toRecipients" => [
            [
                "emailAddress" => [
                    "address" => "test@gmail.com" 
                ] 
            ] 
        ]
    ]
];

3. 验证令牌权限与用户匹配

  • 确认访问令牌包含Mail.Send权限(委托权限需用户已授权,应用权限需管理员同意)。
  • 确认URL中的test@hotmail.com是令牌对应的用户的UPN(用户主体名称)或用户ID,否则会因权限不足触发错误。

4. 调试响应详情

可以通过以下代码获取更详细的错误信息,帮助定位问题:

// 打印响应状态码和完整内容
dd($response->status(), $response->body());

如果修正后仍有问题,检查返回的错误详情(可能包含更具体的错误代码和描述),再针对性排查权限或配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:30:00