【问题标题】:Is there a way to recursive searching folders in Mailkit?有没有办法在 Mailkit 中递归搜索文件夹?
【发布时间】:2017-07-16 07:18:13
【问题描述】:

希望不会对我的 Mailkit 问题感到厌烦,但我更愿意在这里问他们,以便将来在其他人也需要帮助时帮助他们。

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

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

这是我的实际代码,它非常混乱,“应该”只在 2 级文件夹中工作,而在地毯.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】:

    你可以这样做:

    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");
    

    【讨论】:

    • 只是想知道搜索 Fullname 而不是 Name 是否更准确。
    • 如果你有全名,那么是的。
    • 有没有可能没有全名?如果您在层次结构中搜索,可能会有重复的名称,这可能会给出不正确的文件夹。
    • IMailFolder 将始终具有 FullName,但您可能没有。
    • 我的意思是,IMAP 服务器是否缺少在调用 GetFolder 时不会填充 FullName 的任何功能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2017-08-31
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多