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

如何通过Graph API从多Office365/Outlook账户发邮件?遇权限问题求助

解决Graph API发送邮件时的ErrorAccessDenied问题

核对应用权限配置

  • 必须在Azure AD应用注册中为服务账户添加应用类型权限(而非委托权限),具体需要添加Mail.Send权限,且该权限必须经过租户管理员的同意授权。
  • 若需要代表其他用户发送邮件,需添加Mail.Send.Shared应用权限,同时确保目标邮箱已向服务账户开放对应权限。

确认认证流程正确

  • 使用服务账户调用Graph API时,必须采用客户端凭证流(Client Credentials Flow),不能使用委托流。示例代码如下:
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "你的租户ID";
var clientId = "应用注册的Client ID";
var clientSecret = "应用注册的Client Secret";

var credential = new ClientSecretCredential(tenantId, clientId, clientSecret, new ClientSecretCredentialOptions
{
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
});
var graphClient = new GraphServiceClient(credential, scopes);

// 构造邮件并发送
var emailMessage = new Message
{
    Subject = "测试邮件",
    Body = new ItemBody { ContentType = BodyType.Text, Content = "这是通过Graph API发送的测试邮件" },
    ToRecipients = new List<Recipient>
    {
        new Recipient { EmailAddress = new EmailAddress { Address = "收件人邮箱@域名.com" } }
    }
};

// 注意:必须指定具体发送用户的UPN或ID,不能用Me
await graphClient.Users["发件人邮箱@域名.com"].SendMail.PostAsync(emailMessage);

验证目标邮箱的发送权限

  • 若代表其他用户发邮件,需为目标邮箱配置服务账户的发送权限:
    1. 登录Exchange管理中心,找到对应邮箱,进入「权限」设置。
    2. 添加服务账户为「发送代理」或「代表发送」权限。
  • 也可通过PowerShell快速配置:
Add-RecipientPermission "发件人邮箱@域名.com" -Trustee "服务账户UPN" -AccessRights SendAs

检查权限同意状态

  • 进入Azure AD应用注册的「API权限」页面,确认Mail.Send或Mail.Send.Shared权限的状态为「已同意」,若未同意需由租户管理员完成授权操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:37:13