当前位置: 首页 > 知识库问答 >
问题:

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

宗建章
2023-03-14

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

>

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

    service.findItems(wellknownFolderName.contacts,new ItemView)-这只返回用户“联系人”文件夹(而不是全局地址列表)中的联系人,而且我们需要使用resolvename解析电子邮件地址,因为emailadderess集合提供exchange格式的电子邮件地址(不是smtp格式)(abc@company.com)。

  • 共有1个答案

    孙嘉悦
    2023-03-14

    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,直接使用目录,例如,如果它的onpremise通过System.DirectoryServices使用LDAP,或者如果它的Office365,那么您可以使用图访问所有目录对象。

     类似资料:
    • 我正在尝试使用EWS访问Exchange外部联系人(那些不属于特定邮箱的联系人,但属于租户(公司)级别的联系人)。可以从Exchange管理设置网页(Office 365)查看和添加它们- 谢谢。

    • 我目前正在尝试实现一个使用EWS对用户的outlook联系人进行更新的服务,但我在正确写入电子邮件地址字段时遇到了一些麻烦。请注意,我不是一个Exchange开发人员,在EWS方面我是一个新手。 当使用FindItems()方法搜索用户的contacts文件夹时,返回的Contact对象将其电子邮件地址字段作为正确的SMTP地址(blah@blah.com)。但是,当我更新并保存联系人时,下一次检

    • 联系人列表用来展示个人的联系方式。 联系人列表是分组列表(Grouped Lists)的一个特殊的类型,主要有2点不同: 列表区域元素(“list-block”)需要带上额外的“contacts-block”类 页面内容元素(“page-content”)需要带上额外的“contacts-content”类 示例 <div class="page-content contacts-content"

    • M600 会显示您存储在 Google Contacts(Google 联系人)上的联系人信息。您可以呼叫联系人或给他们发送信息或电子邮件。 *请注意,由于手机的操作系统的不同,其通讯功能的使用会受到某些限制。

    • 我正在使用oauth 1.0,到目前为止,我可以成功地从谷歌获得访问令牌。但是当我想从https://www.google.com/m8/feeds/contacts/default/full检索用户联系人时,它返回401错误,没有进一步的解释。 我发现来自Google playground的信息可能不太准确,例如,步骤3和步骤5中的签名基本字符串包含oauth_version,但它是错误的。(如