2017-02-25 1 views
0

J'espère ne pas être ennuyeux avec mes questions Mailkit mais je préfère les demander ici afin d'aider les autres dans le futur s'ils ont besoin de cette aide aussi.Existe-t-il un moyen de rechercher des dossiers récursifs dans Mailkit?

J'ai besoin d'une méthode pour rechercher un dossier. Je vérifie fondamentalement si elle existe et je suis censé ouvrir de toute évidence si j'ai besoin de travailler dessus. Le problème est que selon le serveur de messagerie, cela peut devenir un peu compliqué car tous les mails ne permettent pas de créer des dossiers au premier niveau et ainsi de suite (soupir).

Est-il possible de rechercher récursivement un dossier et d'obtenir son objet MailFolder?

Ceci est mon code réel, qui est assez malpropre, "devrait" travailler dans le dossier de niveau 2 et échoue dans carpeta.GetSubfolders() parce que je me mets à l'esprit avec des dossiers, sous-plumiers et où pourrais-je utiliser le. Méthode ouverte

J'ai fait une méthode pour vérifier si le dossier existe (le suivant) et un autre pour l'ouvrir, donc un problème appelle à une autre: «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); 
    } 
} 

Répondre

2

Vous pouvez faire quelque chose comme ceci:

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; 
} 

Vous pouvez utiliser la méthode ci-dessus comme ceci:

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

Impressionnant! Merci Jeff! Mailkit est la bibliothèque IMAP/POP définitive !! – Gonzo345