【问题标题】:Can I use Exchange Web Services to get active directory listing?我可以使用 Exchange Web 服务获取活动目录列表吗?
【发布时间】:2015-12-01 23:14:28
【问题描述】:

我是使用 EWS 连接到外部客户邮件服务器的系统上的开发人员。这是我们与他们的唯一直接联系。

他们有时还会向我们发送其 Active Directory 用户的 CSV 转储文件,以便我们将其上传到我们的系统中。 我想改进这个过程。

如果我使用 EWS 凭据登录到 OWA 门户,我可以在“联系人”下看到他们的所有公司用户,因此信息就在那里并且可以以某种形式访问。

有没有办法让我自己通过 EWS 连接提取数据(例如作为 LDAP 查询)?并从我们这边处理他们的用户记录?

【问题讨论】:

  • 您是否查看过此链接 - blogs.msdn.com/b/webdav_101/archive/2015/05/11/… 也看看您是否也可以将 PrincipalContext 与 EWS 一起使用
  • 如果您需要 AD 转储,EWS 不会这样做。只有具有 Exchange 属性的对象才能正确显示在 EWS 中。与他们建立安全的 LDAPS 连接(大多数 SaaS 供应商都这样做),然后您可以运行自己的查询。试图从 EWS 中获取广告数据只会让人感到沮丧......
  • 这个类似的帖子有一个解决方案,不知道它是否对我有用。 stackoverflow.com/questions/20188197/…会试一试...

标签: c# exchange-server exchangewebservices outlook-web-app


【解决方案1】:

这实际上取决于客户运行的 Exchange 版本和通讯簿的大小。在 Exchange 2010 EWS 上,它在地址方面的功能受到限制,您有 ResolveName https://msdn.microsoft.com/en-us/library/office/aa563518(v=exchg.150).aspx 一次最多可以返回 100 个条目,因此如果您在“SMTP:”上进行解析,它将返回第一个GAL 中有 100 个条目(因此,如果它小于 100,它会正常工作),如果它大于 100,则它不能很好地工作。一种解决方法是将所有条目放在一个组中,然后使用展开组来获取所有电子邮件地址,然后使用多个 ResolveNames 来获取联系方式。

在 2013 年有 FindPeople 操作 https://msdn.microsoft.com/en-us/library/office/jj191039%28v=exchg.150%29.aspx,如果您有地址簿 Guid,您可以返回 GAL 中的所有条目(使用 eg 时 Find People 支持分页)

FindPeopleType fpType = new FindPeopleType();  
IndexedPageViewType indexPageView = new IndexedPageViewType();  
indexPageView.BasePoint = IndexBasePointType.Beginning;  
indexPageView.Offset = 0;  
indexPageView.MaxEntriesReturned = 100;  
indexPageView.MaxEntriesReturnedSpecified = true;  
fpType.IndexedPageItemView = indexPageView;  


fpType.ParentFolderId = new TargetFolderIdType();  
DistinguishedFolderIdType contactsFolder = new DistinguishedFolderIdType();  
AddressListIdType adList = new AddressListIdType();  
adList.Id = "2117949e-abe8-4915-91eb-6b9f867fd8de";  

fpType.ParentFolderId.Item = adList;  
FindPeopleResponseMessageType fpm = null;  
do  
{  
    fpm = esb.FindPeople(fpType);  
    if (fpm.ResponseClass == ResponseClassType.Success)  
    {  
        foreach (PersonaType PsCnt in fpm.People) {  
            Console.WriteLine(PsCnt.EmailAddress.EmailAddress);  
        }  
        indexPageView.Offset += fpm.People.Length;                      
    }  
    else {  
        throw new Exception("Error");  
    }  
} while (fpm.TotalNumberOfPeopleInView > indexPageView.Offset);  

如果他们使用 Office365,那么 Graph API 是更好的选择。

干杯 格伦

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多