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

本文关键字:列表 获取 Mail 何使用 AE Net | 更新日期: 2023-09-27 18:23:54

我正在尝试使用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
}

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

我发现这是可行的:

var listMailboxes = imap.ListMailboxes(string.Empty, "*");
foreach (var listMailbox in listMailboxes)
{
    var mailbox = listMailbox.Name;                    
}

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的第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参数的内容:

注:参考论点的解释如下实现定义。这取决于服务器实现具有";现在的工作目录";并引导";中断字符";,其覆盖当前工作目录。

因此,这些示例可能起作用,也可能不起作用,这取决于您的服务器实现。