EWS获取包括位于“联系人”文件夹

时间:2018-01-19 15:25:18

标签: c# exchange-server exchangewebservices ews-managed-api

我正在使用Microsoft.Exchange.WebServices 2.2.0实现适配器。我被困住了:

场景:获取所有联系人(甚至是在“联系人”文件夹(WellKnownFolderName.Contacts)之外创建/移动的联系人)。

        List<Contact> result = new List<Contact>();
        FindFoldersResults allFolders = _service.FindFolders(WellKnownFolderName.Root, new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep }); // Getting all folders

        foreach (var folder in allFolders) // loop thru all folders
        {
            SearchFilter.IsEqualTo contactSchemaFilter = new SearchFilter.IsEqualTo(ItemSchema.ItemClass, "Microsoft.Exchange.WebServices.Data.ContactSchema");
            FindItemsResults<Item> discoveredContactsInFolder = _service.FindItems(folder.Id, contactSchemaFilter, new ItemView(int.MaxValue)); // find all items which has same Schema as Contacts.
            result = discoveredContactsInFolder.Select(c => c as Contact).ToList();
        }

我的问题:除了我正在寻找的联系人,我正在获取全球地址列表和联系人组。

问:我错过了任何过滤器或完全不同的方法吗?

祝你好运, SVG

1 个答案:

答案 0 :(得分:0)

首先使用您的代码,您应该分页https://msdn.microsoft.com/en-us/library/office/dn592093(v=exchg.150).aspx FindFolder和FindItems样本的问题是,如果您有更多的1000个文件夹或1000个联系人,因为限制与Exchange一起工作的方式它不会处理< / p>

SearchFilter.IsEqualTo contactSchemaFilter = new SearchFilter.IsEqualTo(ItemSchema.ItemClass, "Microsoft.Exchange.WebServices.Data.ContactSchema");

ItemClass属性是ContentClass https://msdn.microsoft.com/en-us/library/aa125194(v=exchg.65).aspx,因此对于Contacts,这将是

IPM.Contact

联系人组的ItemClass为IPM.DistList

FindFoldersResults allFolders = _service.FindFolders(WellKnownFolderName.Root, new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep }); // Getting all folders

我建议你在MsgFolderRoot开始搜索使用Root的问题是这会考虑邮箱中的NON_IPM_Subtree,其中包含所有系统文件夹,因此会包含大量缓存(例如GAL条目等)。由于NON_IPM_Subtree对用户不可见,因此这些文件夹中不应有用户创建的联系人。