我是使用EWS连接到外部客户邮件服务器的系统的开发人员。这是我们与他们唯一的直接联系。
他们偶尔会向我们发送他们的活动目录用户的CSV转储,以便我们将其上传到我们的系统中。 我想改进这个过程。
如果我使用EWS凭据登录OWA门户,我可以在“联系人”下看到他们的所有公司用户,因此信息就在那里并可以某种形式访问。
有没有办法可以通过EWS连接自行提取数据(例如作为LDAP查询)?并从我们这边处理他们的用户记录?
答案 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就是更好的选择。
干杯 格伦