有没有办法在Mailkit中递归搜索文件夹?

问题描述 投票:0回答:1

希望不会对我的 Mailkit 问题感到无聊,但我更喜欢在这里问他们,以便将来帮助其他也需要此帮助的人。

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

有没有办法递归搜索文件夹并获取其 MailFolder 对象?

这是我的实际代码,非常混乱,“应该”仅在 2 级文件夹中工作,但在 Carpeta.GetSubfolders() 中失败,因为我对文件夹、子文件夹以及在哪里可以使用 .Open 方法感到震惊。

我实际上有一种方法可以检查文件夹是否存在(以下方法),还有另一种方法可以打开它,所以一个问题会调用另一个问题:'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);
    }
}
c# .net imap mailkit
1个回答
4
投票

你可以这样做:

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");
© www.soinside.com 2019 - 2024. All rights reserved.