示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }