public MailResponse GetResponse(string command = null, bool isMultiline = false)//public только для dump { var result = new MailResponse(); Send(command, (s) => { if (s == ".") { return(false); //end of message } if (result.Header == null) //begin of message { result.Header = s; if (!s.StartsWith("+OK", StringComparison.Ordinal)) { throw new Exception("Pop3({0}:{1}) Error: {2}".FormatStr(Host, Port, result.Header)); //"-ERR" } return(isMultiline); } result.Data.Add(!s.IsEmpty() && s[0] == '.' ? s.Substring(1) : s); return(true); }); if (Log.UseTrace) { Log.Trace("Pop3({0}:{1}) Receive: {2}".FormatStr(Host, Port, result.Header)); } return(result); }
public MailResponse GetResponse(string command = null, bool checkResult = true) { var result = new MailResponse(); Send(command.IfEmpty("", TAG + " {0}"), (s) => { if (s.StartsWith(TAG, StringComparison.Ordinal)) //end of message { result.Header = s.Substring(s.IndexOf(' ')).Trim(); if (!result.Header.StartsWith("OK", StringComparison.Ordinal)) { throw new Exception("Imap({0}:{1}) Error: {2}".FormatStr(Host, Port, result.Header)); } return(false); } result.Data.Add(s); return(true); }); if (Log.UseTrace) { Log.Trace("Imap({0}:{1}) Receive: {2}".FormatStr(Host, Port, result.Header)); } return(result); }
private static List <string> GetListResult(MailResponse response) { var result = new List <string>(); foreach (var v in response.Data) { if (v.StartsWith("*", StringComparison.Ordinal)) { var line = v.Substring(v.IndexOf(')') + 1).Trim(); // Remove * LIST(..) // LSUB line = line.Substring(line.IndexOf(' ')).Trim(); // Remove Folder separator result.Add(Decode(line.Trim('"'))); } } return(result); }
private static MailFolder GetSelectResult(MailResponse response, string folder) { MailFolder x = null; if (response.Data.Count > 0) { x = new MailFolder(folder); foreach (var v in response.Data) { Match m; m = Regex.Match(v, @"(\d+) EXISTS"); if (m.Groups.Count > 1) { x.Total = Convert.ToInt32(m.Groups[1].ToString()); } m = Regex.Match(v, @"(\d+) RECENT"); if (m.Groups.Count > 1) { x.New = Convert.ToInt32(m.Groups[1].ToString()); } m = Regex.Match(v, @"UNSEEN (\d+)"); if (m.Groups.Count > 1) { x.UnSeen = Convert.ToInt32(m.Groups[1].ToString()); } m = Regex.Match(v, @" FLAGS \((.*?)\)"); if (m.Groups.Count > 1) { x.Flags = m.Groups[1].ToString().Split(' '); } } x.Read = response.Header.ToUpper().IndexOf("READ", StringComparison.Ordinal) > -1; x.Write = response.Header.ToUpper().IndexOf("WRITE", StringComparison.Ordinal) > -1; } return(x); }