使用Microsoft Graph发送邮件API时令牌报错问题求助
解决Microsoft Graph /me/sendMail API调用的BadRequest错误
错误原因分析
返回的错误信息明确指出:/me request is only valid with delegated authentication flow.,核心问题在于令牌的身份验证流类型不匹配:
- 委托身份验证流:令牌关联具体用户身份,
/me可解析为当前授权用户,这也是Graph Explorer默认使用的流,所以对应的令牌能正常调用API。 - 应用身份验证流:令牌代表应用本身,不关联具体用户,无法识别
/me标识,而你通过Postman获取的令牌大概率属于这种类型。
解决方案
方案1:切换Postman为委托权限流获取令牌
- 在Postman的OAuth 2.0配置中,选择Authorization Code授权类型(属于委托流范畴)。
- 权限配置中添加
Mail.Send的委托权限(注意区分开应用权限)。 - 获取令牌时必须完成用户登录授权流程,确保令牌绑定具体用户身份。
方案2:修改API端点适配应用权限流
如果需要无用户交互的后台服务场景(必须用应用权限流),则修改请求URL为应用流支持的格式:
https://graph.microsoft.com/v1.0/users/{user-principal-name}/sendMail
将{user-principal-name}替换为实际发送邮件的用户邮箱(例如hamzaha@watira.ai),同时确保应用已被授予Mail.Send的应用权限,且完成管理员同意操作。
对应代码修改示例:
# 替换原url为指定用户的端点 url = 'https://graph.microsoft.com/v1.0/users/hamzaha@watira.ai/sendMail'
验证检查点
- 查看令牌内容:委托流令牌包含
scp字段,且值包含Mail.Send;应用流令牌包含roles字段,且值包含Mail.Send。 - 确认权限配置:Azure AD应用的权限列表中,对应流的
Mail.Send权限已正确添加并完成同意。
内容的提问来源于stack exchange,提问作者hamzah jazi
相关产品推荐
相关产品推荐

