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

Ale*_*dru 5 .net c# exchange-server exchangewebservices

我设置了一个共享邮箱并可以访问它及其子文件夹:

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

为此,我需要知道共享邮箱的名称 - 在此示例中,共享邮箱的名称是shared.mailbox@domain.local。有没有办法枚举我能够访问的所有共享邮箱名称?我尝试过在线搜索,但找不到解决方案。

Gle*_*les 3

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

如果您谈论的是 Office365 组,您可以通过 git hub https://github.com/OfficeDev/ews-management-api最新版本的托管 API 中的 GetUserUnifiedGroups 访问这些组

        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);
            }
        } 
Run Code Online (Sandbox Code Playgroud)

被授予访问权限并启用自动映射的邮箱(这些是 Outlook 将自动映射到配置文件中的邮箱),例如 Add-MailboxPermission -AutoMapping 可以使用自动发现来发现,例如

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,对于刚刚添加邮箱或文件夹权限的邮箱,无法知道其他邮箱,然后枚举每个邮箱 DACL 并进行检查。