我可以使用Exchange Web服务获取活动目录列表吗

本文关键字:活动 列表 获取 服务 可以使 Exchange Web 我可以 | 更新日期: 2023-09-27 18:25:19

我是一个使用EWS连接到外部客户邮件服务器的系统的开发人员。这是我们与他们唯一的直接联系。

他们偶尔也会向我们发送他们的active directory用户的CSV转储,这样我们就可以将其上传到我们的系统中。我想改进这个过程。

如果我使用EWS凭据登录OWA门户网站,我可以在"联系人"下看到他们的所有公司用户,因此信息就在那里,并且可以以某种形式访问。

有没有一种方法可以让我自己通过EWS连接提取数据(例如作为LDAP查询)?并从我们这边处理他们的用户记录?

我可以使用Exchange Web服务获取活动目录列表吗

这实际上取决于客户运行的Exchange版本和通讯簿的大小。在Exchange 2010上,EWS在您拥有ResolveName的地址端所能做的工作受到限制https://msdn.microsoft.com/en-us/library/office/aa563518(v=exchg.150).aspx,一次最多可以返回100个条目,因此如果您在"SMTP:"上执行解析,则会返回GAL中的前100个条目(因此,如果小于100,则可以正常工作),如果大于100,则无法正常工作。一种解决方法是将所有条目放在一个组中,然后使用"扩展组"获取所有电子邮件地址,然后使用多个ResolveNames获取联系人详细信息。

2013年有FindPeople行动https://msdn.microsoft.com/en-us/library/office/jj191039%28v=exchg.150%29.aspx如果你有地址簿Guid,你可以返回GAL中的所有条目(使用例如时,Find People支持分页)

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

如果他们正在使用Office365,那么Graph API是一个更好的选项。

干杯Glen