我可以使用Exchange Web服务获取活动目录列表吗?

时间:2015-12-01 23:14:28

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

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

他们偶尔会向我们发送他们的活动目录用户的CSV转储,以便我们将其上传到我们的系统中。 我想改进这个过程。

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

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

1 个答案:

答案 0 :(得分:0)

这实际上取决于客户运行的Exchange版本和地址簿的大小。在Exchange 2010上,EWS在地址端可以执行的操作受到限制,您可以在ResolveName https://msdn.microsoft.com/en-us/library/office/aa563518(v=exchg.150).aspx中一次最多返回100个条目,这样如果您在" SMTP上执行解析:& #34;这将返回GAL中的前100个条目(因此,如果它小于100,它将正常工作)如果它大于100它不能很好地工作。一种解决方法是将所有条目放在一个组中,然后使用Expand Group获取所有电子邮件地址,然后使用多个ResolveNames来获取联系人详细信息。

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

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就是更好的选择。

干杯 格伦