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

如何使用.NET通过模拟访问Outlook365邮箱?权限报错排查

问题

使用以下代码模拟访问Outlook365邮箱时,执行Folder.Bind抛出ServiceRequestException(403)错误,跟踪日志显示权限不足:

var cca = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithClientSecret(clientSecret)
    .WithTenantId(tenantId)
    .Build();

var ewsScopes = new [] { "https://outlook.office365.com/.default" };
var authResult = await cca.AcquireTokenForClient(ewsScopes).ExecuteAsync(cancellationToken);

var service = new ExchangeService
{
    Credentials = new OAuthCredentials(authResult.AccessToken),
    Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"),
    ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "mailbox@user.com"),
    TraceListener = new TraceListener(),
    TraceEnabled = true,
    TraceFlags = TraceFlags.All
};

Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);

错误日志:

x-ms-diagnostics: 2000008;reason="The token contains not enough scope to make this call.";error_category="invalid_grant"

疑问:是否需要扩展ewsScopes?或是Azure中缺少正确权限?需配置哪些角色/权限?

解决方案

1. ewsScopes无需修改

你使用的https://outlook.office365.com/.default是正确的,这个scope会自动包含Azure AD应用中已配置的所有应用权限,不需要额外扩展。

2. 核心问题:Azure AD应用缺少EWS应用权限

需要在Azure门户中给你的应用注册配置对应的Exchange Web Services应用权限:

  • 登录Azure门户,找到目标应用注册
  • 进入API权限页面,点击添加权限
  • 选择Office 365 Exchange Online(专门适配EWS场景)
  • 切换到应用权限标签,勾选所需权限(至少选一个能访问邮箱的权限):
    • Exchange.ManageAsApp:允许应用以自身身份访问所有邮箱的EWS资源,适合模拟访问场景
    • 若只需特定操作,可选择细分权限如Mail.Read、Mail.ReadWrite等
  • 添加权限后,点击授予管理员同意(必须完成此步骤,权限才会生效)

3. 额外注意事项

  • 确认应用注册已启用客户端凭据流(当前代码使用的就是该流程,无需调整)
  • 确保被模拟的邮箱真实存在,且应用权限覆盖该邮箱的访问范围
  • 配置后若仍报错,检查管理员同意是否成功,或等待权限同步(通常需几分钟到半小时)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:30:41