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

Exchange server 使用EWS检索所有Exchange联系人(全局地址列表和用户联系人文件夹),exchange-server,exchangewebservices,Exchange Server,Exchangewebservices,我正在尝试使用EWS获取所有联系人(全局地址列表和用户联系人文件夹) 迄今为止尝试的选项: Service.ResolveName(“SMTP:”)-这对仅获取具有限制 前100个字符,因为我想获得所有联系人,以便 与分页一起显示在网格中。此外,启用returnContactDetail=true(以及特定于联系人架构的属性集)不会返回联系人信息,如(显示名称、公司名称等) NameResolutionCollection nd=service.ResolveName(“SMTP:”,Resol

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

迄今为止尝试的选项:

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

    NameResolutionCollection nd=service.ResolveName(“SMTP:”,ResolveNameSearchLocation.Contacts目录,true,new PropertySet(BasePropertySet.IdOnly,new PropertyDefinitionBase[]{ContactSchema.ParentFolderId,ContactSchema.Id,ContactSchema.DisplayName,ContactSchema.EmailAddress1,ContactSchema.EmailAddress2,ContactSchema.EmailAddress3,ContactSchema.CompanyName})

  • service.FindItems(WellKnownFolderName.Contacts,new ItemView)这只返回用户联系人文件夹中的联系人,而不是全局地址列表中的联系人,我们还需要使用resolvename as EmailAddress集合解析电子邮件地址,该集合提供的exchange格式的电子邮件地址不是smtp格式(abc@company.com)


  • EWS中唯一的另一个选项是使用FindPeople操作,如果您知道全局地址列表的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并直接使用该目录。例如,如果它的OnFieldLoT使用Stask.DirectyServices或其Office 365,则可以使用该图访问所有目录对象。