【问题标题】:Enumerating shared mailbox names you are able to access using EWS Managed API枚举您可以使用 EWS 托管 API 访问的共享邮箱名称
【发布时间】:2016-08-11 12:42:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net exchange-server exchangewebservices


    【解决方案1】:

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

    如果您谈论的是 Office365 组,您可以通过 git hub https://github.com/OfficeDev/ews-managed-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);
                }
            } 
    

    允许访问启用自动映射的邮箱(这些是 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);
        }
    }
    

    但是,您刚刚将权限添加到邮箱或文件夹的邮箱,除了枚举每个邮箱 DACL 并检查之外,无法知道这一点。

    【讨论】:

      【解决方案2】:

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

      Get-Mailbox -ResultSize Unlimited |选择姓名、别名、收件人类型详细信息 |导出-CSV c:\Users.csv

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

      而且目前没有办法直接通过api找到服务器中的邮箱

      【讨论】:

      • 该命令不会列出所有用户的所有邮箱,包括共享邮箱吗?这将是一个巨大的痛苦,因为我只关心查看当前用户可以访问哪些共享邮箱,而这纯粹是反复试验。
      • 我不是系统管理员,但我很确定您可以使用更多选项获得共享的,您可以尝试在适当的堆栈交换中询问该问题
      • 谢谢,这肯定是有用的东西,我只是不太明白为什么 API 不公开它。我的意思是,例如,当您从 Exchange 连接到 Office 365 帐户并加入组时,您会看到该组的共享邮箱。然后,当您在线而不是在 Exchange 中浏览到 Office 365 邮箱时,您也会在那里看到该组,因此他们必须有一种方法来跟踪它,无论是它的 Active Directory 还是其他东西。我不禁想知道托管 API 是否确实为所有这些公开了某种隐藏的解决方案......
      • 我听到了...即使 Hening Krause(以 EWS 团队成员而闻名)也无法回答类似问题...stackoverflow.com/questions/4217527/ews-access-shared-calendars
      猜你喜欢
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      相关资源
      最近更新 更多