c# - 如何使用 EWS 托管 API 从文件夹和公共(public)文件夹的子文件夹中获取所有项目

标签 c# api exchange-server exchangewebservices

如何在 exchange server2010 uisng 托管 API 中检索“公用文件夹”及其“子文件夹”中的所有项目???

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

         {
            //get item info;
         } 
}

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

最佳答案

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

public void GetAllFolders(ExchangeService service, List<Folder> 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<Folder> 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<Folder> completeListOfFolderIds = new List<Folder>();
//Fills list with all public folders and subfolders
GetAllFolders(service, completeListOfFolderIds);
foreach(Folder folder in completeListOfFolderIds)
{
ItemView itemView = new ItemView(int.MaxValue);
FindItemsResults<Item> searchResults = service.FindItems(folder.Id, itemView);
//do something with item list    
}

FYI FindFolders/FindItems 仅返回前 1000 个项目,因此如果您有大量结构,则必须更改此代码以克服此问题。

关于c# - 如何使用 EWS 托管 API 从文件夹和公共(public)文件夹的子文件夹中获取所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13877629/

相关文章:

api - 是否有用于 Amazon Web Services 定价的 API?

java - Exchange 日历、创建约会和唯一 ID

c# - 是否可以使用 c# 中的 Exchange Web 服务分配角色?

c# - 将带有 alpha channel 的图像复制到带有自定义背景颜色的剪贴板?

c# - C#中的异步操作和线程

php Google 电子表格 API "Request had insufficient authentication scopes"

javascript - 使用 Mixpanel JQL 访问 .filter() 范围内的变量

asp.net - 无法加载文件或程序集 'Microsoft.Exchange.WebServices, Version=14.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

c# - 如何使用 Visual Studio - 生成异步 WCF 调用?

c# - 为了解决 GA 问题而构建可靠的服务与 Actor