【问题标题】:How to get all folders name of gmail using ImapX lib? C#如何使用 ImapX lib 获取 gmail 的所有文件夹名称? C#
【发布时间】:2011-03-24 07:28:26
【问题描述】:

如何使用 ImapX lib 获取 gmail 的所有文件夹名称? 我在http://hellowebapps.com/2010-02-09/imapx-net-library-to-manage-imap-folders/ 中阅读但未找到获取所有文件夹部分。

【问题讨论】:

    标签: c# email gmail imap imapx


    【解决方案1】:

    这是获取所有文件夹列表的方法...

            FolderCollection folders = client.GetFolders();
            foreach (Folder myfolder in folders)
            {
                MessageBox.Show(myfolder.Name);
            }
    

    然后使用以下名称:

    ImapX.MessageCollection messages = client.Folders["Spam"].Search("ALL", true);
    

    注意文件夹名称区分大小写...

    【讨论】:

      【解决方案2】:

      您可以迭代 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
      

      【讨论】:

        【解决方案3】:

        方法如下:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多