首页 > 解决方案 > EWS - 按全名获取文件夹

问题描述

我设法使用从这里复制的代码获取了文件夹的全名:

private static string GetFullFolderName(Microsoft.Exchange.WebServices.Data.ExchangeService EServ, string FolderID)
{
    Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition folderPathExtendedProp = new Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(26293, Microsoft.Exchange.WebServices.Data.MapiPropertyType.String);
    Microsoft.Exchange.WebServices.Data.PropertySet folderPropSet = new Microsoft.Exchange.WebServices.Data.PropertySet(Microsoft.Exchange.WebServices.Data.BasePropertySet.FirstClassProperties) { folderPathExtendedProp };
    Microsoft.Exchange.WebServices.Data.Folder folder = Microsoft.Exchange.WebServices.Data.Folder.Bind(EServ, FolderID, folderPropSet);

string path = null;
folder.TryGetProperty(folderPathExtendedProp, out path);

return path?.Replace("\ufffe", "\\");

}

现在,我想按其全名搜索文件夹。我写了一个函数,但这似乎只是为了寻找 DisplayName。

public static Microsoft.Exchange.WebServices.Data.FindFoldersResults GetFolders(Microsoft.Exchange.WebServices.Data.ExchangeService EServ, string NamePart = "")
{
    if (NamePart.Trim().Length > 0) { 
        Microsoft.Exchange.WebServices.Data.SearchFilter.ContainsSubstring SF = new Microsoft.Exchange.WebServices.Data.SearchFilter.ContainsSubstring(Microsoft.Exchange.WebServices.Data.FolderSchema.DisplayName, NamePart);
        return EServ.FindFolders(Microsoft.Exchange.WebServices.Data.WellKnownFolderName.Root, SF, new Microsoft.Exchange.WebServices.Data.FolderView(System.Int32.MaxValue) { Traversal = Microsoft.Exchange.WebServices.Data.FolderTraversal.Deep });
    }else{
        return EServ.FindFolders(Microsoft.Exchange.WebServices.Data.WellKnownFolderName.Root, new Microsoft.Exchange.WebServices.Data.FolderView(System.Int32.MaxValue) { Traversal = Microsoft.Exchange.WebServices.Data.FolderTraversal.Deep });
    }
}

是否可以使用文件夹的全名而不是 DisplayName 作为搜索条件?

谢谢你和问候,扬

标签: c#exchangewebservices

解决方案


不,您不能对该属性创建限制,因为它是计算属性。我建议您从以下位置开始搜索

WellKnownFolderName.MsgFolderRoot

Root 将包含所有对用户不可见的 Non_IPM_Subtree 文件夹,因此它只会降低您的查询效率。

如果将该属性添加到 folderView 的 PropertySet 中,则可以过滤返回的结果以匹配您搜索的路径。使用 IsEqual SearchFilter 和确切的文件夹 DisplayName 也将加快您的搜索速度。当您根据要查找的路径过滤结果集时,您应该能够摆脱任何提取文件夹名称(例如,相同的名称不同的路径)。

就我个人而言,当我需要这样做时,我将路径分开并从父文件夹进行浅层遍历。它的请求更多,但我从未遇到过该方法的可靠性和速度方面的任何问题,并且它也适用于上述方法会失败的公共文件夹,例如Exchange Web Service FolderId 用于 user 创建的文件夹


推荐阅读