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

如何通过C#修改Microsoft 365邮箱的访问权限?

纯C#实现Microsoft 365邮箱访问权限管理(基于Microsoft Graph)

目前Microsoft Graph已支持邮箱访问权限的管理操作,无需依赖EWS或Exchange Online PowerShell模块,完全可以通过C# SDK实现。以下是针对代理权限(Delegate Access)和文件夹级权限的具体实现方案:

一、代理权限管理(针对整个邮箱的代理访问)

代理权限允许指定用户以代理身份访问目标邮箱(包括接收、发送邮件等操作)。

获取现有代理列表

using Microsoft.Graph;
using Azure.Identity;

// 初始化GraphClient(以应用权限为例)
var graphClient = new GraphServiceClient(new ClientSecretCredential(
    "tenantId",
    "clientId",
    "clientSecret"));

// 替换为目标邮箱的UPN或ID
var mailboxId = "sharedmailbox@contoso.com";
var delegates = await graphClient.Users[mailboxId]
    .MailboxSettings
    .Delegates
    .Request()
    .GetAsync();

foreach (var del in delegates)
{
    Console.WriteLine($"代理用户: {del.User?.DisplayName}, 收件权限: {del.ReceiveMessages}, 发件权限: {del.SendItems}");
}

添加新代理

var newDelegate = new MailboxSettingsDelegate
{
    User = new User { Id = "delegateUserId" }, // 替换为代理用户的ID
    ReceiveMessages = DelegateReceiveMessagesPermission.ReceiveAndRead,
    SendItems = DelegateSendItemsPermission.SendOnBehalf,
    SendAs = DelegateSendAsPermission.None
};

await graphClient.Users[mailboxId]
    .MailboxSettings
    .Delegates
    .Request()
    .AddAsync(newDelegate);

移除代理

await graphClient.Users[mailboxId]
    .MailboxSettings
    .Delegates["delegateUserId"] // 替换为要移除的代理用户ID
    .Request()
    .DeleteAsync();

二、文件夹级权限管理(细粒度控制邮箱文件夹)

如果需要对特定邮箱文件夹(如根文件夹、收件箱)设置权限,可使用以下方法:

获取文件夹权限

// 获取邮箱根文件夹的权限(替换为"inbox"可操作收件箱)
var folderPermissions = await graphClient.Users[mailboxId]
    .MailFolders["root"]
    .Permissions
    .Request()
    .GetAsync();

foreach (var perm in folderPermissions)
{
    Console.WriteLine($"授权用户: {perm.GrantedToV2?.User?.DisplayName}, 权限级别: {perm.Role}");
}

添加文件夹权限

var newPermission = new Permission
{
    GrantedToV2 = new Recipient
    {
        User = new User { Id = "targetUserId" } // 替换为授权用户ID
    },
    Role = PermissionRole.ReadWrite // 可选值:None、ReadOnly、ReadWrite、Owner、Custom
};

await graphClient.Users[mailboxId]
    .MailFolders["root"]
    .Permissions
    .Request()
    .AddAsync(newPermission);

移除文件夹权限

// 先通过获取权限列表拿到对应的permissionId,再执行删除
await graphClient.Users[mailboxId]
    .MailFolders["root"]
    .Permissions["permissionId"] // 替换为要移除的权限ID
    .Request()
    .DeleteAsync();

必要权限配置

在Azure AD应用注册中,需添加以下Microsoft Graph权限(根据应用场景选择):

  • 应用权限:Exchange.ManageAsApp(适用于后台服务无用户上下文的场景)
  • 委派权限:MailboxSettings.ReadWrite、Mail.ReadWrite(适用于用户登录后的操作场景)
    注意:管理员需对需要管理员同意的权限进行授权。

额外说明

  • 共享邮箱的操作逻辑与普通用户邮箱完全一致,只需将mailboxId替换为共享邮箱的UPN即可。
  • 确保使用的Microsoft Graph SDK版本为最新稳定版(可通过NuGet更新Microsoft.Graph和Azure.Identity包)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:07:45