How To Get all ITEMS from Folders and Sub-folders of PublicFolders Using EWS Managed API

后端 未结 4 981
小蘑菇
小蘑菇 2020-12-03 17:33

How to retrieve all items from \"public folders\" and its \"sub-folders\" in exchange server2010 uisng managed API???

rootfolder = Folder.Bind(service,WellKn         


        
4条回答
  •  旧巷少年郎
    2020-12-03 18:14

    List completeListOfFolderIds = new List();
    GetAllFolders(service, completeListOfFolderIds);
    foreach (Folder folder in completeListOfFolderIds)
    {
        List results = GetItems(service, folder);
    }
    
    public void GetAllFolders(ExchangeService service, List completeListOfFolderIds)
    {
        ExtendedPropertyDefinition isHiddenProp = new ExtendedPropertyDefinition(0x10f4, MapiPropertyType.Boolean);
        FolderView folderView = new FolderView(int.MaxValue);
        folderView.PropertySet = new PropertySet(isHiddenProp,FolderSchema.DisplayName, FolderSchema.Id, FolderSchema.ChildFolderCount, FolderSchema.TotalCount, FolderSchema.ParentFolderId, FolderSchema.WellKnownFolderName);
        List searchFilterCollection = new List();
        searchFilterCollection.Add(new SearchFilter.IsEqualTo(isHiddenProp, false));
        SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchFilterCollection.ToArray());
        Folder rootfolder = Folder.Bind(service, WellKnownFolderName.MsgFolderRoot);
        // Indicate a Traversal value of Deep, so that all subfolders are retrieved.
        folderView.Traversal = FolderTraversal.Deep;
        rootfolder.Load();
        //FindFoldersResults findFolderResults = service.FindFolders(WellKnownFolderName.MsgFolderRoot, folderView);
        FindFoldersResults findFolderResults = rootfolder.FindFolders(searchFilter, folderView);
        foreach (Folder folder in findFolderResults)
        {
            completeListOfFolderIds.Add(folder);
            //List results = GetItems(service, folder);
            FindAllSubFolders(service, folder.Id, completeListOfFolderIds);                
        }
    }
    
    private void FindAllSubFolders(ExchangeService service, FolderId parentFolderId, List completeListOfFolderIds)
    {
        FolderView folderView = new FolderView(int.MaxValue);
        FindFoldersResults foundFolders = service.FindFolders(parentFolderId, folderView);
        completeListOfFolderIds.AddRange(foundFolders);
    
        // Now recurse
        foreach (Folder folder in foundFolders)
        {
            FindAllSubFolders(service, folder.Id, completeListOfFolderIds);
        }
    }
    
    private List GetItems(ExchangeService service ,Folder folder)
    {
        if (service == null)
        {
            return null;
        }
        List items = new List();
        PropertySet propertySet = new PropertySet(BasePropertySet.FirstClassProperties);
        const Int32 pageSize = 50;
        ItemView itemView = new ItemView(pageSize);
        itemView.PropertySet = propertySet;
        FindItemsResults searchResults = null;
        try
        {
            do
            {                    
                searchResults = service.FindItems(folder.Id,itemView);
                items.AddRange(searchResults.Items);
                itemView.Offset += pageSize;
            } while (searchResults.MoreAvailable);
        }
        catch (Exception ex)
        {                
        }
        return items;
    }
    

提交回复
热议问题