有没有办法在 Mailkit 中递归搜索文件夹?
Is there a way to recursive searching folders in Mailkit?
希望不要对我的 Mailkit 问题感到厌烦,但我更喜欢在这里提问,以便将来在其他人也需要此帮助时提供帮助。
我需要一种搜索文件夹的方法。我基本上会检查它是否存在,如果我需要处理它,我显然会打开它。问题是,根据邮件服务器的不同,这可能会有点混乱,因为并非每个邮件服务器都允许在第一级创建文件夹等等(叹息)。
有什么方法可以递归搜索文件夹并获取其 MailFolder 对象吗?
这是我的实际代码,非常混乱,"should" 仅在 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);
}
}
你可以这样做:
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");
希望不要对我的 Mailkit 问题感到厌烦,但我更喜欢在这里提问,以便将来在其他人也需要此帮助时提供帮助。
我需要一种搜索文件夹的方法。我基本上会检查它是否存在,如果我需要处理它,我显然会打开它。问题是,根据邮件服务器的不同,这可能会有点混乱,因为并非每个邮件服务器都允许在第一级创建文件夹等等(叹息)。
有什么方法可以递归搜索文件夹并获取其 MailFolder 对象吗?
这是我的实际代码,非常混乱,"should" 仅在 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);
}
}
你可以这样做:
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");