使用EWS查找收件箱文件夹的所有子文件夹我有以下收件箱文件夹结构:Inbox--ABC----ABC2----ABC3--XYZ----XYZ2--123----123A----123B----123C我正在使用ExchangeWeb服务和以下代码来查找收件箱文件夹的子文件夹:ExchangeServiceservice=newExchangeService(ExchangeVersion.Exchange2010);service.AutodiscoverUrl("MyName@MyDomain.com");Mailboxmb=newMailbox("MyName@MyDomain.com");FindFoldersResultsfindResults=service.FindFolders(WellKnownFolderName.Inbox,newFolderView(int.MaxValue));foreach(FolderfolderinfindResults.Folders){Console.WriteLine(folder.DisplayName);这部分有效,因为它返回ABC、XYZ和123个文件夹;不幸的是,它不会返回每个文件夹内的文件夹(ABC2、ABC3、XYZ2、123A、123B、123C)。此外,文件夹中可能包含多级子文件夹。我如何编写这段代码,以便它返回所有子文件夹,无论它们嵌套的程度如何?在搜索文件夹时,您可以告诉EWS进行深度行走。您可以使用FolderView.Traversal属性执行此操作。然后,您的代码将更改为类似于以下内容:您可以分页请求并从服务器获取整个文件夹层次结构。正如雅各布指出的那样,关键是FolderView.Traversal属性。例如,对于具有大约1,300个文件夹的Exchange邮箱,以下代码仅发出2次请求。只要您保持在或低于服务器限制,您就可以将页面大小设置为任何您喜欢的大小。仅供参考:ExchangeOnline(Office365)在响应中最多包含1,000个项目。我还没有测试过它,所以在查询本地Exchange服务器时我不能说任何类似的限制。以上就是C#学习教程:使用EWS查找收件箱文件夹所有子文件夹共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——usingMicrosoft.VisualBasic;使用系统;使用系统集合;使用System.Collections.Generic;使用系统数据;使用系统诊断;使用Exchange=Microsoft.Exchange.WebServices.Data;staticinternalclassMain{publicstaticvoidMain(){交换。ExchangeServiceoService=default(Exchange.ExchangeService);字典oUsers=默认(字典);oUsers=newDictionary();oUsers.Add("User1",newUser("write.to.me1@my.address.com","Some-Fancy-Password1"));oUsers.Add("User2",newUser("write.to.me2@my.address.com","Some-Fancy-Password2"));oUsers.ToList.ForEach((KeyValuePairCredential)=>{File.Delete(LOG_FILE_PATH.ToFormat(Credential.Key));});oUsers.ToList.ForEach((KeyValuePairCredential)=>{LogFileName=Credential.Key;Console.WriteLine("获取邮箱[{0}]的邮件计数...",LogFileName);Console.WriteLine();oService=服务ice.ConnectToService(Credential.Value);GetAllFolders(oService,LOG_FILE_PATH.ToFormat(Credential.Key));控制台.清除();});控制台.WriteLine();Console.Write("按任意键退出...");控制台.ReadKey();}privatestaticvoidGetAllFolders(Exchange.ExchangeServiceService,stringLogFilePath){Exchange.ExtendedPropertyDefinitionoIsHidden=default(Exchange.ExtendedPropertyDefinition);列出oFolders=default(List);Exchange.FindFoldersResultsoResults=default(Exchange.FindFoldersResults);boollHasMore=false;Exchange.FolderoChild=default(Exchange.Folder);Exchange.FolderViewoView=default(Exchange.FolderView);短nPageSize=0;短nOffSet=0;列出oPaths=默认值(列表);列表oPath=默认值(列表);oIsHidden=newExchange.ExtendedPropertyDefinition(0x10f4,Exchange.MapiPropertyType.Boolean);nPageSize=1000;oFolders=newList();lHasMore=true;nOffSet=0;while(lHasMore){oView=newExchange.FolderView(nPageSize,nOffSet,Exchange.OffsetBasePoint.Beginning);oView.PropertySet=newExchange.PropertySet(Exchange.BasePropertySet.IdOnly);oView.PropertySet.Add(oIsHidden);oView.PropertySet.Add(Exchange.FolderSchema.ParentFolderId);oView.PropertySet.Add(Exchange.FolderSchema.DisplayName);oView.PropertySet.Add(Exchange.FolderSchema.FolderClass);oView.PropertySet.Add(Exchange.FolderSchema.TotalCount);oView.Traversal=Exchange.FolderTraversal.Deep;oResults=Service.FindFolders(Exchange.WellKnownFolderName.MsgFolderRoot,oView);oFolders.AddRange(oResults.Folders);lHasMore=oResults.MoreAvailable;如果(lHasMore){nOffSet+=nPageSize;}}oFolders.RemoveAll(Folder=>Folder.ExtendedProperties(0).Value==true);oFolders.RemoveAll(Folder=>Folder.FolderClass!="IPF.Note");oPaths=新列表();oFolders.ForEach(Folder=>{oChild=Folder;oPath=newList();do{oPath.Add(oChild.DisplayName);oChild=oFolders.SingleOrDefault(Parent=>Parent.Id.UniqueId==oChild.ParentFolderId.UniqueId);}while(oChild!=null);oPath.Reverse();oPaths.Add("{0}{1}{2}".ToFormat(Strings.Join(oPath.ToArray,DELIMITER),Constants.vbTab,Folder.TotalCount));});oPaths.RemoveAll(Path=>Path.StartsWith("同步问题"));File.WriteAllText(LogFilePath,Strings.Join(oPaths.ToArray,Constants.vbCrLf));}私有静态字符串LogFileName;privateconststringLOG_FILE_PATH="D:\Emails\Remote{0}.txt";私有常量字符串DELIMITER="\";}内部类服务{publicstaticExchange.ExchangeServiceConnectToService(UserUser){returnService.ConnectToService(User,null);}publicstaticExchange.ExchangeServiceConnectToService(UserUser,Exchange.ITraceListenerListener){Exchange.ExchangeServiceoService=default(Exchange.ExchangeService);oService=newExchange.ExchangeService(Exchange.ExchangeVersion.Exchange2013_SP1);oService.Credentials=newNetworkCredential(User.EmailAddress,User.Password);服务ice.AutodiscoverUrl(User.EmailAddress,RedirectionUrlValidationCallback);if(Listener!=null){oService.TraceListener=Listener;oService.TraceEnabled=true;oService.TraceFlags=Exchange.TraceFlags.All;}返回服务;}privatestaticboolRedirectionUrlValidationCallback(stringRedirectionUrl){var_with1=newUri(RedirectionUrl);返回_with1.Scheme.ToLower=="https";}}内部类用户{publicUser(stringEmailAddress){_EmailAddress=EmailAddress;_密码=新的SecureString();}publicUser(stringEmailAddress,stringPassword){_EmailAddress=EmailAddress;_密码=新的SecureString();Password.ToList.ForEach((charChr)=>{this.Password.AppendChar(Chr);});密码.MakeReadOnly();}publicstaticUserGetUser(){UserfunctionReturnValue=null;字符串sEmailAddress=null;ConsoleKeyInfooUserInput=default(ConsoleKeyInfo);Console.Write("请输入邮箱地址:");sEmailAddress=Console.ReadLine;控制台.Write("请输入密码:");functionReturnValue=newUser(sEmailAddress);while(true){oUserInput=Console.ReadKey(true);如果(oUserInput.Key==ConsoleKey.Enter){break;//TODO:可能不正确。是:退出}elseif(oUserInput.Key==ConsoleKey.Escape){functionReturnValue.Password.Clear();}elseif(oUserInput.Key==ConsoleKey.Backspace){if(functionReturnValue.Password.Length!=0){functionReturnValue.Password.RemoveAt(functionReturnValue.Password.Length-1);}}else{functionReturnValue.Password.AppendChar(oUserInput.KeyChar);控制台.Write("*");}}if(functionReturnValue.Password.Length==0){functionReturnValue=null;}else{functionReturnValue.Password.MakeReadOnly();控制台.WriteLine();}返回函数返回值;}publicstringEmailAddress{get;}公共SecureString密码{得到;}}内部类TraceListener:Exchange.ITraceListener{publicvoidTrace(stringTraceType,stringTraceMessage){File.AppendAllText("{0}.txt".ToFormat(Path.Combine("D:\Emails\TraceOutput",Guid.NewGuid.ToString("D"))),TraceMessage);}}//=========================================================//Telerik(www.telerik.com)提供的服务//转换由NRefactory提供支持。//推特:@telerik//Facebook:facebook.com/telerik//=====================================================================================================================================代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
