我可以使用Exchange Web服务获取活动目录列表吗
本文关键字:活动 列表 获取 服务 可以使 Exchange Web 我可以 | 更新日期: 2023-09-27 18:25:19
我是一个使用EWS连接到外部客户邮件服务器的系统的开发人员。这是我们与他们唯一的直接联系。
他们偶尔也会向我们发送他们的active directory用户的CSV转储,这样我们就可以将其上传到我们的系统中。我想改进这个过程。
如果我使用EWS凭据登录OWA门户网站,我可以在"联系人"下看到他们的所有公司用户,因此信息就在那里,并且可以以某种形式访问。
有没有一种方法可以让我自己通过EWS连接提取数据(例如作为LDAP查询)?并从我们这边处理他们的用户记录?
这实际上取决于客户运行的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中的所有条目(使用例如时,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是一个更好的选项。
干杯Glen