Метод ImapClient.ListMailboxes
из AE.Net.Mail является довольно тонкой оболочкой для команды 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();
}
Раздел 6.3.8 IMAP RFCсодержит некоторые примеры того, как эти параметры обычно интерпретируются сервером 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
:
Примечание. Интерпретация ссылочного аргумента определяется реализацией.Это зависит от того, имеет ли реализация сервера концепцию «текущего рабочего каталога» и ведущих «символов пробоя», которые переопределяют текущий рабочий каталог.
Так что примеры могут работать или не работать в зависимости отна вашем сервере реализации.