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

使用C# SDK调用Microsoft Graph更新其他用户邮箱设置问题咨询

跨用户更新Microsoft Graph邮箱自动回复配置的正确实现(C# SDK)

两类报错的根因

  • The OData request is not supported:4.x及更早版本的Graph C# SDK存在路径拼接缺陷,调用内置的MailboxSettings请求构造器操作非me路径的用户资源时,会生成不符合OData规范的请求路径,触发接口报错。
  • Access is denied. Check credentials and try again:权限配置不符合要求。MailboxSettings.ReadWrite委托权限仅支持操作用户自身的邮箱设置,跨用户操作时必须使用带.All后缀的对应权限,且完成管理员同意,否则会被接口拒绝。

前置权限配置

根据你的认证场景选择对应权限,配置后必须完成管理员同意才能生效:

  • 后台服务场景(客户端凭据流,无登录用户):申请MailboxSettings.ReadWrite.All应用权限
  • 有登录用户场景(授权码等委托流):申请MailboxSettings.ReadWrite.All委托权限,且登录账号需拥有目标用户的邮箱管理权限(如全局管理员、Exchange管理员角色)

代码实现

适用于Graph SDK 5.x及以上稳定版

5.x版本已修复旧版路径拼接bug,可直接调用原生SDK方法:

using Azure.Identity;
using Microsoft.Graph;
using Microsoft.Graph.Models;

// 初始化Graph客户端(客户端凭据流示例)
var tenantId = "你的Azure租户ID";
var clientId = "你的应用注册ID";
var clientSecret = "你的应用客户端密钥";
var targetUserUpnOrId = "目标用户的UPN或Azure AD对象ID";

var graphClient = new GraphServiceClient(
    new ClientSecretCredential(tenantId, clientId, clientSecret),
    new[] { "https://graph.microsoft.com/.default" }
);

// 构造自动回复配置
var updatePayload = new MailboxSettings
{
    AutomaticRepliesSetting = new AutomaticRepliesSetting
    {
        Status = AutomaticRepliesStatus.Scheduled,
        ExternalAudience = ExternalAudienceScope.All,
        ScheduledStartDateTime = new DateTimeTimeZone
        {
            DateTime = "2024-06-01T09:00:00",
            TimeZone = "China Standard Time"
        },
        ScheduledEndDateTime = new DateTimeTimeZone
        {
            DateTime = "2024-06-03T18:00:00",
            TimeZone = "China Standard Time"
        },
        InternalReplyMessage = "内部自动回复:我当前外出,6月4日返岗后将统一处理消息。",
        ExternalReplyMessage = "外部自动回复:我当前外出,紧急事项请联系backup@contoso.com。"
    }
    // 可在此处追加其他邮箱配置,如时区、默认语言等
};

// 走users路径发起更新请求
await graphClient.Users[targetUserUpnOrId].MailboxSettings.PatchAsync(updatePayload);

适用于Graph SDK 4.x及更早版本

旧版SDK需跳过内置的请求构造逻辑,手动指定正确请求路径规避bug:

using System.Text;
using System.Text.Json;

var targetUserUpnOrId = "目标用户的UPN或Azure AD对象ID";
var updatePayload = new
{
    automaticRepliesSetting = new
    {
        status = "scheduled",
        externalAudience = "all",
        scheduledStartDateTime = new { dateTime = "2024-06-01T09:00:00", timeZone = "China Standard Time" },
        scheduledEndDateTime = new { dateTime = "2024-06-03T18:00:00", timeZone = "China Standard Time" },
        internalReplyMessage = "内部自动回复内容",
        externalReplyMessage = "外部自动回复内容"
    }
};

// 手动构造正确的PATCH请求路径
var baseRequestBuilder = graphClient.Users[targetUserUpnOrId].MailboxSettings;
var requestUrl = $"{baseRequestBuilder.Request().RequestUrl}";
var request = new HttpRequestMessage(HttpMethod.Patch, requestUrl);
request.Content = new StringContent(
    JsonSerializer.Serialize(updatePayload),
    Encoding.UTF8,
    "application/json"
);

// 附加认证信息后发起请求
await graphClient.AuthenticationProvider.AuthenticateRequestAsync(request);
var response = await graphClient.HttpProvider.SendAsync(request);
response.EnsureSuccessStatusCode();

验证提示:配置权限后如果仍返回权限拒绝,先检查Azure AD管理中心的权限页是否显示“已为对应租户授予管理员同意”,仅在应用注册中勾选权限但未完成管理员同意的情况下,接口不会认可该权限。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:30:54