如何通过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
相关产品推荐
相关产品推荐

