如何使用EWS托管API从PublicFolders的文件夹和子文件夹中获取所有ITEMS

如何从Exchange Server2010 uisng托管API中的“公共文件夹”及其“子文件夹”中检索所有项目???

rootfolder = Folder.Bind(service,WellKnownFolderName.PublicFoldersRoot); rootfolder.Load(); foreach (Folder folder in rootfolder.FindFolders(new FolderView(int.MaxValue))) { FindItemsResults findResults = folder.FindItems(iv); foreach (Item item in findResults) { //get item info; } } 

“如果我这样做,我不会在它的子文件夹中存在项目..公共文件夹也不支持深度遍历查询..如何从公用文件夹的子文件夹中获取项目???”

要获取所有文件夹,请使用以下代码:

 public void GetAllFolders(ExchangeService service, List completeListOfFolderIds) { FolderView folderView = new FolderView(int.MaxValue); FindFoldersResults findFolderResults = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, folderView); foreach (Folder folder in findFolderResults) { completeListOfFolderIds.Add(folder); FindAllSubFolders(service, folder.Id, completeListOfFolderIds); } } private void FindAllSubFolders(ExchangeService service, FolderId parentFolderId, List completeListOfFolderIds) { //search for sub folders FolderView folderView = new FolderView(int.MaxValue); FindFoldersResults foundFolders = service.FindFolders(parentFolderId, folderView); // Add the list to the growing complete list completeListOfFolderIds.AddRange(foundFolders); // Now recurse foreach (Folder folder in foundFolders) { FindAllSubFolders(service, folder.Id, completeListOfFolderIds); } } 

获取所有项目:

 List completeListOfFolderIds = new List(); //Fills list with all public folders and subfolders GetAllFolders(service, completeListOfFolderIds); foreach(Folder folder in completeListOfFolderIds) { ItemView itemView = new ItemView(int.MaxValue); FindItemsResults searchResults = service.FindItems(folder.Id, itemView); //do something with item list } 

您需要执行公用文件夹树的递归遍历。 您无法对公用文件夹执行深度遍历。

 public IEnumerable FindItemsInSubfolders(FolderId root, SearchFilter itemsFilter) { foreach (Folder folder in service.FindFolders(root, new FolderView(int.MaxValue) { Traversal = FolderTraversal.Deep })) foreach(Item item in service.FindItems(folder.Id, itemsFilter, new ItemView(int.MaxValue))) yield return item; foreach (Item item in service.FindItems(root, itemsFilter, new ItemView(int.MaxValue))) yield return item; }