2017-02-25 97 views
0

希望不要厌倦我的Mailkit问题,但我在此先问他们,以便在未来帮助其他人,如果他们也需要这些帮助。有没有办法在Mailkit中递归搜索文件夹?

我需要一种搜索​​文件夹的方法。我基本上检查它是否存在,如果我需要处理它,我打算明显打开它。问题在于,根据邮件服务器的不同,这可能会变得杂乱无章,因为并非每个邮件服务器都允许在第一级创建文件夹等等(叹息)。

是否有任何方式递归搜索文件夹并获取其MailFolder对象?

这是我实际的代码,这是相当混乱,“应该”在第2级文件夹中工作,并在carpeta.GetSubfolders()失败,因为我正在用文件夹,子分流器和我在哪里可以使用。打开方法。

其实我有一个方法来检查是否存在的文件夹(以下之一),另一个打开它,这样一个问题需要到另一个:'d

private bool ExisteCarpeta(string nombreCarpetaABuscar) 
{ 
    try 
    { 
     imap.Inbox.Open(FolderAccess.ReadOnly); 
     var toplevel = imap.GetFolder(imap.PersonalNamespaces[0]); 
     var carpetasNivel1 = toplevel.GetSubfolders(); 
     var carpeta = carpetasNivel1.FirstOrDefault(x => x.FullName.Equals(nombreCarpetaABuscar, StringComparison.InvariantCultureIgnoreCase)); 

     carpeta.GetSubfolders(); 
     return carpeta != null; 
    } 
    catch (Exception ex) 
    { 
     string mensaje = "Ha habido un problema comprando la existencia de la carpeta en el correo. \n"; 
     throw new Exception(mensaje, ex); 
    } 
} 

回答

2

你可以做这样的事情:

static IMailFolder FindFolder (IMailFolder toplevel, string name) 
{ 
    var subfolders = toplevel.GetSubfolders().ToList(); 

    foreach (var subfolder in subfolders) { 
     if (subfolder.Name == name) 
      return subfolder; 
    } 

    foreach (var subfolder in subfolders) { 
     var folder = FindFolder (subfolder, name); 

     if (folder != null) 
      return folder; 
    } 

    return null; 
} 

你可以这样使用上面的方法:

var toplevel = imap.GetFolder (imap.PersonalNamespaces[0]); 
var sent = FindFolder (toplevel, "Sent Items"); 
+0

真棒!谢谢杰夫! Mailkit是权威性的IMAP/POP库! – Gonzo345

相关问题