2017-02-25 138 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

相關問題