使用 EWS 检索所有 Exchange 联系人(全局地址列表和用户联系人文件夹)



我正在尝试使用 EWS 获取所有联系人(全局地址列表和用户联系人文件夹(。

到目前为止尝试的选项:

  1. Service.ResolveName("SMTP:"( -这有仅获取的限制 前 100 个字符,因为我想获得所有联系人,以便我可以 与分页一起显示在网格中。此外,打开 returnContactDetail = true(以及特定于联系人架构的属性集(不会返回联系信息,例如(显示名称、公司名称等(。

    NameResolutionCollection nd = service。ResolveName("SMTP:", ResolveNameSearchLocation.ContactsThenDirectory, true, new PropertySet(BasePropertySet.IdOnly, new PropertyDefinitionBase[] { ContactSchema.ParentFolderId, ContactSchema.Id, ContactSchema.DisplayName, ContactSchema.EmailAddress1, ContactSchema.EmailAddress2, ContactSchema.EmailAddress3, ContactSchema.CompanyName }((;

  2. 服务。FindItems(WellKnownFolderName.Contacts,new ItemView( -这仅从用户的联系人文件夹而不是全局地址列表中返回联系人,并且我们还需要使用ResolveName解析电子邮件地址,因为Emailadderess集合提供了不是SMTP格式(abc@company.com(的Exchange格式电子邮件地址。

EWS 中唯一的其他选择是使用 FindPeople 操作 https://learn.microsoft.com/en-us/exchange/client-developer/web-service-reference/findpeople-operation 如果您知道全局地址列表的 GUID,您应该能够将整个事情分页回来,例如。

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);  

否则,请考虑不使用 EWS 并直接使用目录,例如,如果其内部部署通过 System.DirectoryServices 使用 LDAP,或者如果其 Office365,那么您可以使用图形访问所有目录对象。

最新更新