我正在使用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
答案 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对用户不可见,因此这些文件夹中不应有用户创建的联系人。