多租户AAD应用通过Graph API跨租户发件权限咨询
跨租户使用Graph API发送邮件的权限配置方案
核心前提
你的多租户Azure AD应用已配置Application级别的Send Mail权限,但跨租户发件需完成目标租户的应用授权,同时确保目标邮箱的代发权限设置正确。
具体操作步骤
目标租户管理员完成应用授权
- 多租户应用不会自动获得其他租户的权限,必须由目标租户(如
zetaweb.in)的全局管理员或Exchange管理员完成管理员同意。 - 授权操作:让目标租户管理员使用管理员账号访问授权URL(替换占位符为你的应用信息):
https://login.microsoftonline.com/{目标租户ID或域名}/adminconsent?client_id={你的应用ID}&scope=https://graph.microsoft.com/.default - 同意后,你的应用将在目标租户中获得已配置的Application级权限。
- 多租户应用不会自动获得其他租户的权限,必须由目标租户(如
配置目标邮箱的代发权限
- 即使应用有全局Send Mail权限,仍需确保目标邮箱(
joel@zetaweb.in)允许应用代发,二选一即可:- SendAs权限(直接以邮箱身份发送):通过Exchange Online PowerShell执行
Add-RecipientPermission -Identity "joel@zetaweb.in" -Trustee "{你的应用ID}" -AccessRights SendAs - SendOnBehalf权限(代表邮箱发送,显示"代表XX发送"):发送Graph API PATCH请求
PATCH https://graph.microsoft.com/v1.0/users/joel@zetaweb.in Content-Type: application/json { "grantSendOnBehalfTo": [{"id": "{你的应用ID}"}] }
- SendAs权限(直接以邮箱身份发送):通过Exchange Online PowerShell执行
- 即使应用有全局Send Mail权限,仍需确保目标邮箱(
代码适配调整
- 应用权限模式下获取令牌时,需指定目标租户:将令牌请求中的
tenant参数设置为目标租户ID或域名(如zetaweb.in),而非common(common更适用于用户登录场景)。 - 发送邮件的Graph API请求路径保持不变:
POST https://graph.microsoft.com/v1.0/users/joel@zetaweb.in/sendMail - 请求体按原有格式传入邮件内容即可。
- 应用权限模式下获取令牌时,需指定目标租户:将令牌请求中的
常见问题排查
- 目标租户找不到应用:检查应用的「支持的账户类型」是否设置为「任何组织目录中的账户和个人Microsoft账户」,确保授权URL中的应用ID正确。
- 权限不足报错:确认目标租户已完成管理员同意,同时检查邮箱的
SendAs/SendOnBehalf权限是否配置生效。
内容的提问来源于stack exchange,提问作者Ankit Shaw
相关产品推荐
相关产品推荐

