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

Posted

技术标签:

【中文标题】用于不知名文件夹名称的 Exchange Web 服务 FolderId【英文标题】:Exchange Web Service FolderId for a not well known folder name 【发布时间】:2011-12-16 06:56:26 【问题描述】:

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

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

我发现的唯一示例是与 WellKnownFolderNames 相关的示例。

【问题讨论】:

【参考方案1】:

您可以使用FindFolders 方法找到所有文件夹。使用WellKnownFolderName.Root 显示收件箱中的所有文件夹。您必须创建一个FolderView 并添加您想要查看的属性(例如IDDisplayName)。将遍历设置为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);

// set View
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);
    

【讨论】:

如果您需要在特定邮箱中搜索文件夹,请使用 new FolderId(WellKnownFolderName.Root, mailbox) 为特定根文件夹创建 FolderId 并在 FindFolders 调用中使用它。 如果您已经有一个ExchangeService 实例,这里有一个仅用于文件夹查找部分的函数:gist.github.com/eeskildsen/e928472d11ba4723440e763ab5eb8b59。像这样打电话:Folder folder = FindFolderByDisplayName(exchangeService, "My Folder Name"); Console.WriteLine(folder.Id);.【参考方案2】:

有点晚了,但以下是我用来找到我的文件夹的内容:

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 的建议编辑添加了一行。

【讨论】:

我的回答有问题吗?评论将帮助我了解为什么它被否决... 嵌套文件夹的修复方法是什么? @faisantp view.Traversal = FolderTraversal.Deep; 好吧实际上在我的情况下使用你的代码我只能找到默认文件夹而不是自行创建的文件夹。有什么想法吗? 好的,我正在查看我的邮箱而不是共享文件夹。谢谢【参考方案3】:

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

假设你有这样的结构:

Root
--Folder A
----Test
--Folder B
----Test

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

如果知道路径(如 Folder B/Test),则可以迭代获取文件夹路径。

在此链接中查看我的方法SetFolderHomePage:http://www.infinitec.de/post/2011/10/05/Setting-the-Homepage-of-an-Exchange-folder-using-the-EWS-Managed-API.aspx。

【讨论】:

我认为你应该解释一下你的方法在你的答案中是如何工作的,以防目标站点被关闭。否则,它可能看起来更像是点击生成器而不是答案。

以上是关于用于不知名文件夹名称的 Exchange Web 服务 FolderId的主要内容,如果未能解决你的问题,请参考以下文章

到Microsoft Exchange的连接不可用

Exchange Web 服务通知

检查rabbitmq中是不是存在指定名称的Exchange

导入 Exchange Web 服务 (EWS) wsdl 文件时如何修复未解析的类型?

Skype for Business 网页安排会议(无Exchange Server)

用于 Exchange 2007 的 Powershell 管理单元