Azure 配置邮箱通过 OAuth2.0 发送邮件(Global / China)
这篇文章给出一套可直接落地的配置流程,适用于在观远相关场景中对接 Azure 邮箱,通过 OAuth2.0(client credentials)调用 Microsoft Graph 发送邮件。
一、先确认环境:Global 与 China 不能混用
Azure Global:portal.azure.com / login.microsoftonline.com / graph.microsoft.com
Azure China:portal.azure.cn / login.chinacloudapi.cn / microsoftgraph.chinacloudapi.cn
最常见错误就是 Token 域名、scope 域名、sendMail 域名来自不同环境,导致鉴权或调用失败。

二、应用注册与权限
在对应 Azure 门户完成:应用注册、生成 client secret、配置 Graph 邮件发送权限(如 Mail.Send)、管理员同意(Grant admin consent)。

三、获取 Access Token(Client Credentials)
Global 示例:
curl -X POST "https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id={client_id}" \
-d "client_secret={client_secret}" \
-d "grant_type=client_credentials" \
-d "scope=https://graph.microsoft.com/.default"
China 示例:
curl -X POST "https://login.chinacloudapi.cn/{tenant_id}/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id={client_id}" \
-d "client_secret={client_secret}" \
-d "grant_type=client_credentials" \
-d "scope=https://microsoftgraph.chinacloudapi.cn/.default"

四、调用 sendMail 接口
Global:POST https://graph.microsoft.com/v1.0/users/{user_id_or_upn}/sendMail
China:POST https://microsoftgraph.chinacloudapi.cn/v1.0/users/{user_id_or_upn}/sendMail
curl -X POST "https://graph.microsoft.com/v1.0/users/{user_id_or_upn}/sendMail" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d "{...}"


五、常见报错排查
1) invalid_scope:scope 域名和环境不匹配。
2) invalid_client:client_id/client_secret 错误或 secret 过期。
3) 403 Forbidden:缺少 Mail.Send 或未管理员同意。
4) sendMail 404:Token 与 API 调用跨环境混用。

|