【发布时间】:2011-03-24 07:28:26
【问题描述】:
如何使用 ImapX lib 获取 gmail 的所有文件夹名称? 我在http://hellowebapps.com/2010-02-09/imapx-net-library-to-manage-imap-folders/ 中阅读但未找到获取所有文件夹部分。
【问题讨论】:
如何使用 ImapX lib 获取 gmail 的所有文件夹名称? 我在http://hellowebapps.com/2010-02-09/imapx-net-library-to-manage-imap-folders/ 中阅读但未找到获取所有文件夹部分。
【问题讨论】:
这是获取所有文件夹列表的方法...
FolderCollection folders = client.GetFolders();
foreach (Folder myfolder in folders)
{
MessageBox.Show(myfolder.Name);
}
然后使用以下名称:
ImapX.MessageCollection messages = client.Folders["Spam"].Search("ALL", true);
注意文件夹名称区分大小写...
【讨论】:
您可以迭代 SubFolder 集合并获取所有这些 gamail 文件夹及其路径。一个例子:
var client = new ImapClient(...);
client.Connection();
client.LogIn(...);
foreach (var item in WalkFolderTree(client.Folders))
{
Console.WriteLine(item.FolderPath);
}
client.LogOut();
您必须自定义实现遍历代码,例如:
public IEnumerable<Folder> WalkFolderTree(FolderCollection folders)
{
foreach (var item in folders)
{
if (item.HasChildren)
{
WalkFolderTree(item.SubFolder);
}
yield return item;
}
}
然后它将列出所有文件夹,例如:
INBOX
...
[Gmail]
[Gmail]/All Mail
[Gmail]/Drafts
[Gmail]/Sent Mail
[Gmail]/Spam
[Gmail]/Starred
[Gmail]/Trash
【讨论】:
方法如下:
public List<string> getMailboxes(string emailAddress, string emailPassword)
{
var client = new ImapClient("imap.gmail.com", 993, true, true);
if (client.Connect())
{
if (client.Login(emailAddress, emailPassword))
{
//get all parent folers
var folders = client.Folders;
foreach (var parentFolder in folders)
{
//get parent folder path
var parentPath = parentFolder.Path;
//check if every parent folder has subfolder
if (parentFolder.HasChildren)
{
var subfolders = parentFolder.SubFolders;
foreach(var subfolder in subfolders)
{
var subPath = subfolder.Path;
}
}
}
}
}
}
【讨论】: