枚举您可以使用EWS托管API访问的共享邮箱名称

本文关键字:访问 共享 邮箱名 API 托管 可以使 EWS 枚举 | 更新日期: 2023-09-27 18:01:52

我设置了一个共享邮箱,可以访问它和它的子文件夹:

var folderId = new FolderId(WellKnownFolderName.MsgFolderRoot, "shared.mailbox@domain.local");
var folders = client.FindFolders(folderId, new FolderView(Int32.MaxValue));

为此,我需要知道共享邮箱的名称—在本例中,共享邮箱的名称为shared.mailbox@domain.local。是否有任何方法可以枚举我能够访问的所有共享邮箱名称?

枚举您可以使用EWS托管API访问的共享邮箱名称

例如,当您从Exchange连接到Office 365帐户并加入组时,您将看到该组的共享邮箱。当您在线浏览Office 365邮箱而不是在Exchange中浏览时,您也会看到该组

如果你谈论的是一个Office365组,你可以通过GetUserUnifiedGroups在github的最新版本的Managed API中访问它们https://github.com/OfficeDev/ews-managed-api eg

        RequestedUnifiedGroupsSet Group = new RequestedUnifiedGroupsSet();
        Group.FilterType = UnifiedGroupsFilterType.All;
        Group.SortDirection = SortDirection.Ascending;
        Group.SortType = UnifiedGroupsSortType.DisplayName;
        List<RequestedUnifiedGroupsSet> reqG = new List<RequestedUnifiedGroupsSet>();
        reqG.Add(Group);
        Collection<UnifiedGroupsSet> ugGroupSet = service.GetUserUnifiedGroups(reqG,"jcool@domain.com");
        foreach (UnifiedGroupsSet ugset in ugGroupSet)
        {
            foreach (UnifiedGroup ugGroup in ugset.Groups)
            {
                Console.WriteLine(ugGroup.SMTPAddress);
            }
        } 

允许访问启用了自动映射的邮箱(这些邮箱是Outlook将自动映射到配置文件中的邮箱)例如Add-MailboxPermission -AutoMapping可以使用Autodiscover发现eg

AutodiscoverService adAutoDiscoverService = new AutodiscoverService(ExchangeVersion.Exchange2013_SP1);
adAutoDiscoverService.Credentials = new NetworkCredential("user@domain.com", "pass");
adAutoDiscoverService.EnableScpLookup = false;
adAutoDiscoverService.RedirectionUrlValidationCallback = adAutoDiscoCallBack;
adAutoDiscoverService.PreAuthenticate = true;
adAutoDiscoverService.KeepAlive = false;


GetUserSettingsResponse gsp = adAutoDiscoverService.GetUserSettings("user@domain.com", UserSettingName.AlternateMailboxes);
Object Mailboxes = null;
if (gsp.Settings.TryGetValue(UserSettingName.AlternateMailboxes, out Mailboxes))
{
    foreach (AlternateMailbox Mailbox in ((AlternateMailboxCollection)Mailboxes).Entries) 
    {
        Console.WriteLine(Mailbox.SmtpAddress);
    }
}

但是,在您刚刚向邮箱或文件夹添加权限的邮箱中,没有办法知道这一点,除非枚举每个邮箱的DACL并进行检查。

在EMS中运行此命令查找所有用户的邮箱名并导出为csv:

Get-Mailbox -ResultSize Unlimited | Select Name,Alias,RecipientTypeDetails | Export-Csv c:'Users.csv

然后形成你的代码,从文件中读取并循环它们。我建议将文件夹id存储在字典中,以便以后可以访问它们

目前还没有办法直接从api中找到服务器中的邮箱