我正在尝试使用EWS获取所有联系人(“全局地址列表”和“用户联系人”文件夹)。
到目前为止尝试过的选项:
Service.ResolveName(“ SMTP:”)-此限制仅限于获取 我想获取所有联系人的前100个字符,以便我可以 与分页一起显示在网格中。另外,打开returnContactDetail = true(以及特定于Contact Schema的Property设置)不会返回诸如显示名称,公司名称等的联系信息。
NameResolutionCollection nd = service.ResolveName(“ SMTP:”,ResolveNameSearchLocation.ContactsThenDirectory,true,新PropertySet(BasePropertySet.IdOnly,新PropertyDefinitionBase [] {ContactSchema.ParentFolderId,ContactSchema.Id,ContactSchema.DisplayName,ContactSchema.EmailAddress1,ContactSchema .EmailAddress2,ContactSchema.EmailAddress3,ContactSchema.CompanyName}));
service.FindItems(WellKnownFolderName.Contacts,new ItemView)-这仅从用户的联系人文件夹而不是全局地址列表中返回联系人,并且我们还需要使用resolvename来解析电子邮件地址emailadderess集合提供的交换格式电子邮件地址不是smtp格式(abc@company.com)。
答案 0 :(得分:0)
EWS中的唯一其他选择是使用FindPeople操作https://docs.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并直接使用Directory,例如,如果其内部部署通过System.DirectoryServices使用LDAP或Office365,则可以使用Graph访问所有目录对象。