Exchange Web服务FolderId用于未知的文件夹名称

时间:2011-10-27 06:56:52

标签: c# exchangewebservices

我在Exchange邮箱中有一个文件夹,它是根(不是收件箱)的子邮件。

如何使用EWS托管API获取此类文件夹的ID?

我找到的只有与WellKnownFolderNames有关的例子。

3 个答案:

答案 0 :(得分:26)

您可以使用FindFolders方法找到所有文件夹。使用WellKnownFolderName.Root它将显示收件箱的所有文件夹。您必须创建一个FolderView并添加您想要查看的属性(例如ID和DisplayName)。将travesal设置为deep以便查找所有文件夹。在我的例子中,我正在寻找具有displayName“Test”

的文件夹
//set Server
        ExchangeService server = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
        server.UseDefaultCredentials = true;
        string configUrl = @"https://yourServerAddress.asmx";
        server.Url = new Uri(configUrl);
        //SetView
        FolderView view = new FolderView(100);
        view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
        view.PropertySet.Add(FolderSchema.DisplayName);
        view.Traversal = FolderTraversal.Deep;
        FindFoldersResults findFolderResults = server.FindFolders(WellKnownFolderName.Root, view);
        //find specific folder
        foreach(Folder f in findFolderResults)
        {
            //show folderId of the folder "test"
            if (f.DisplayName == "Test")
                Console.WriteLine(f.Id);
        }

答案 1 :(得分:13)

有点晚了,但以下是我以前找到的文件夹:

var view = new FolderView(1);
view.Traversal = FolderTraversal.Deep;
var filter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Rejected");
var results = Service.FindFolders(WellKnownFolderName.Root, filter, view);
if (results.TotalCount < 1)
    throw new Exception("Cannot find Rejected folder");
if (results.TotalCount > 1)
    throw new Exception("Multiple Rejected folders");
Rejected = Folder.Bind(Service, results.Folders.Single().Id);

编辑:显然我的代码不适用于嵌套的层次结构。我根据cookiemonster的建议编辑添加了一行。

答案 2 :(得分:6)

七层的答案是有效的,但可能会导致不良结果。

假设您有这种结构:

- 文件夹A

----测试

- 文件夹B

----测试

他提供的代码将返回两个测试文件夹。

如果您知道路径(如文件夹B /测试),则可以迭代获取文件夹路径。请参阅此链接中的方法SetFolderHomePage:http://www.infinitec.de/post/2011/10/05/Setting-the-Homepage-of-an-Exchange-folder-using-the-EWS-Managed-API.aspx