public virtual async Task<Mailbox[]> ListSuscribesMailboxesAsync(string reference, string pattern) { await IdlePauseAsync(); var x = new List<Mailbox>(); string command = GetTag() + "LSUB " + reference.QuoteString() + " " + pattern.QuoteString(); string reg = "\\* LSUB \\(([^\\)]*)\\) \\\"([^\\\"]+)\\\" \\\"([^\\\"]+)\\\""; string response = await SendCommandGetResponseAsync(command); Match m = Regex.Match(response, reg); while (m.Groups.Count > 1) { Mailbox mailbox = new Mailbox(m.Groups[3].ToString()); x.Add(mailbox); response = await GetResponseAsync(); m = Regex.Match(response, reg); } await IdleResumeAsync(); return x.ToArray(); }
/* public virtual Lazy<MailMessage>[] SearchMessages(SearchCondition criteria, bool headersonly = false, bool setseen = false) { return Search(criteria, true) .Select(x => new Lazy<MailMessage>(() => GetMessage(x, headersonly, setseen))) .ToArray(); } */ public virtual async Task<Mailbox> SelectMailboxAsync(string mailboxName) { await IdlePauseAsync(); mailboxName = ModifiedUtf7Encoding.Encode(mailboxName); var tag = GetTag(); var command = tag + "SELECT " + mailboxName.QuoteString(); var response = await SendCommandGetResponseAsync(command); if (IsResultOK(response)) response = await GetResponseAsync(); var mailbox = new Mailbox(mailboxName); Match match; while (response.StartsWith("*")) { if ((match = Regex.Match(response, @"\d+(?=\s+EXISTS)")).Success) mailbox.NumMsg = match.Value.ToInt(); else if ((match = Regex.Match(response, @"\d+(?=\s+RECENT)")).Success) mailbox.NumNewMsg = match.Value.ToInt(); else if ((match = Regex.Match(response, @"(?<=UNSEEN\s+)\d+")).Success) mailbox.NumUnSeen = match.Value.ToInt(); else if ((match = Regex.Match(response, @"(?<=\sFLAGS\s+\().*?(?=\))")).Success) mailbox.SetFlags(match.Value); response = await GetResponseAsync(); } CheckResultOK(response); mailbox.IsWritable = Regex.IsMatch(response, "READ.WRITE", RegexOptions.IgnoreCase); _SelectedMailbox = mailboxName; await IdleResumeAsync(); return mailbox; }
public virtual async Task<Mailbox> ExamineAsync(string mailbox) { await IdlePauseAsync(); Mailbox x = null; string tag = GetTag(); string command = tag + "EXAMINE " + ModifiedUtf7Encoding.Encode(mailbox).QuoteString(); string response = await SendCommandGetResponseAsync(command); if (response.StartsWith("*")) { x = new Mailbox(mailbox); while (response.StartsWith("*")) { Match m; m = Regex.Match(response, @"(\d+) EXISTS"); if (m.Groups.Count > 1) x.NumMsg = m.Groups[1].ToString().ToInt(); m = Regex.Match(response, @"(\d+) RECENT"); if (m.Groups.Count > 1) x.NumNewMsg = m.Groups[1].Value.ToInt(); m = Regex.Match(response, @"UNSEEN (\d+)"); if (m.Groups.Count > 1) x.NumUnSeen = m.Groups[1].Value.ToInt(); m = Regex.Match(response, @"UIDVALIDITY (\d+)"); if (m.Groups.Count > 1) x.UIDValidity = m.Groups[1].Value.ToInt(); m = Regex.Match(response, @" FLAGS \((.*?)\)"); if (m.Groups.Count > 1) x.SetFlags(m.Groups[1].ToString()); response = await GetResponseAsync(); } _SelectedMailbox = mailbox; } await IdleResumeAsync(); return x; }