如何使用AE.Net.Mail获取邮箱列表?

时间:2012-02-08 00:07:13

标签: c# asp.net email

我正在尝试使用AE.Net.Mail获取邮箱列表,但我找不到任何文档。 ListMailboxes方法接受引用字符串和模式字符串。我不确定这两个参数应该是什么。

using (var imap = new AE.Net.Mail.ImapClient(host, username, password, AE.Net.Mail.ImapClient.AuthMethods.Login, port, isSSL))
{
    List<Mailbox> boxes = imap.ListMailboxes("", ""); // string reference, string parameter
}

2 个答案:

答案 0 :(得分:5)

我发现这个有用:

var listMailboxes = imap.ListMailboxes(string.Empty, "*");

foreach (var listMailbox in listMailboxes)
{
    var mailbox = listMailbox.Name;                    
}

答案 1 :(得分:3)

AE.Net.Mail中的ImapClient.ListMailboxes方法是IMAP LIST命令的一个非常薄的包装器。

public Mailbox[] ListMailboxes(string reference, string pattern) 
{
    IdlePause();

    var x = new List<Mailbox>();
    string command = GetTag() + "LIST " + reference.QuoteString() + " " + pattern.QuoteString();
    string reg = "\\* LIST \\(([^\\)]*)\\) \\\"([^\\\"]+)\\\" \\\"?([^\\\"]+)\\\"?";
    string response = SendCommandGetResponse(command);
    Match m = Regex.Match(response, reg);
    while (m.Groups.Count > 1) 
    {
        Mailbox mailbox = new Mailbox(m.Groups[3].ToString());
        x.Add(mailbox);
        response = GetResponse();
        m = Regex.Match(response, reg);
    }
    IdleResume();
    return x.ToArray();
}
IMAP RFC的

Section 6.3.8包含一些示例,说明IMAP服务器通常如何解释这些参数(“邮箱名称”是pattern参数):

Reference     Mailbox Name  Interpretation
------------  ------------  --------------
~smith/Mail/  foo.*         ~smith/Mail/foo.*
archive/      %             archive/%
#news.        comp.mail.*   #news.comp.mail.*
~smith/Mail/  /usr/doc/foo  /usr/doc/foo
archive/      ~fred/Mail/*  ~fred/Mail/*

虽然它还对Reference参数说了以下内容:

  

注意:引用参数的解释是   实现定义。这取决于是否   服务器实现有一个“当前的概念   工作目录“和领导”突破字符“,   它会覆盖当前的工作目录。

因此,根据您的服务器实现,示例可能有效,也可能无效。