【发布时间】:2011-12-16 06:56:26
【问题描述】:
我在 Exchange 邮箱中有一个文件夹,它是根(不是收件箱)的子级。
如何使用 EWS 托管 API 获取此类文件夹的 ID?
我发现的唯一示例是与 WellKnownFolderNames 相关的示例。
【问题讨论】:
我在 Exchange 邮箱中有一个文件夹,它是根(不是收件箱)的子级。
如何使用 EWS 托管 API 获取此类文件夹的 ID?
我发现的唯一示例是与 WellKnownFolderNames 相关的示例。
【问题讨论】:
您可以使用FindFolders 方法找到所有文件夹。使用WellKnownFolderName.Root 显示收件箱中的所有文件夹。您必须创建一个FolderView 并添加您想要查看的属性(例如ID 和DisplayName)。将遍历设置为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);.
有点晚了,但以下是我用来找到我的文件夹的内容:
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 的建议编辑添加了一行。
【讨论】:
view.Traversal = FolderTraversal.Deep;
七层的答案是有效的,但可能会导致不希望的结果。
假设你有这样的结构:
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。
【讨论】: