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

时间:2018-08-22 14:11:45

标签: exchange-server exchangewebservices

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

到目前为止尝试过的选项:

  1. 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}));

  2. service.FindItems(WellKnownFolderName.Contacts,new ItemView)-这仅从用户的联系人文件夹而不是全局地址列表中返回联系人,并且我们还需要使用resolvename来解析电子邮件地址emailadderess集合提供的交换格式电子邮件地址不是smtp格式(abc@company.com)。

1 个答案:

答案 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访问所有目录对象。