コード例 #1
0
 // Метод получения альтернативного способа просмотра письма
 private void GetView(string text)
 {
     if (text.Contains("\r\n\r\n"))
     {
         // Заголовок альтернативного способа просмотра письма
         string header = text.Substring(0, text.IndexOf("\r\n\r\n"));
         // Тело альтернативного способа просмотра письма
         string body = text.Substring(text.IndexOf("\r\n\r\n") + 4);
         // Тип контента альтернативного способа просмотра письма
         ContentType ct = ParserMessage.GetContentType(header);
         // Получение транспортной кодировки
         TransferEncoding transEncode = ParserMessage.GetBodyTransfer(header);
         // Получение текста письма в формате html-страницы
         if (ct.MediaType == MediaTypeNames.Text.Html)
         {
             BodyEncoding         = ParserMessage.MyGetEncoding(ct.CharSet);
             BodyTransferEncoding = transEncode;
             Body       = body;
             IsBodyHtml = true;
         }
         // Получение текста письма в виде обычного текста
         else if (ct.MediaType == MediaTypeNames.Text.Plain && !IsBodyHtml)
         {
             BodyEncoding         = ParserMessage.MyGetEncoding(ct.CharSet);
             BodyTransferEncoding = transEncode;
             Body = body;
         }
     }
 }
コード例 #2
0
 // Метод отправляет запрос на IMAP-сервер и получает с него ответ
 private string SRComand(string cmd)
 {
     if (busyStream)
     {
         throw new Exception("Поток занят");
     }
     else
     {
         string response = null;
         busyStream = true;
         // Увеличение счетчика команд
         lastIndex++;
         // Ключевое слово для окончания чтения
         string key  = "KiR35" + lastIndex.ToString();
         string _cmd = key + " " + cmd + "\r\n";
         Write(_cmd);
         do
         {
             // Получение ответа и удаление из него лишних символов
             response += ParserMessage.RemChar(Read(key), "\0");
         } while (!(response.Contains(key)));
         busyStream = false;
         // Ограничение ответа до ключевого слова
         return(response.Substring(0, response.IndexOf(key) + key.Length + 4));
     }
 }
コード例 #3
0
 // Команда загрузки списка папок
 public void List()
 {
     if (Connected)
     {
         string _cmd   = "LIST " + "\"\"" + " \"*\"";
         string answer = SRComand(_cmd);
         if (answer.Contains(" OK "))
         {
             // Получение списка папок из строки ответа сервера
             // и наступление события завершения выполнения команды LIST
             ListCompleted(ParserMessage.GetFolders(answer));
         }
         else
         {
             throw new Exception("Ошибка загрузки списка почтовых ящиков");
         }
     }
     else
     {
         throw new Exception("Нет соединения");
     }
 }
コード例 #4
0
 // Команда загрузки тела письма
 public void LoadMessage(string num)
 {
     if (Connected)
     {
         string _cmd   = "FETCH " + num + " BODY[TEXT]";
         string answer = SRComand(_cmd);
         if (answer.Contains(" OK "))
         {
             // Получение тела письма из строки ответа сервера
             // и наступление события завершения выполнения команды LoadMessage
             LoadMessageCompleted(ParserMessage.GetBody(answer));
         }
         else
         {
             throw new Exception("Ошибка загрузки письма");
         }
     }
     else
     {
         throw new Exception("Нет соединения");
     }
 }
コード例 #5
0
 // Метод добавления тела письма
 public void AddBody(string body)
 {
     Body = body;
     if (isHaveAttachments)
     {
         // Добавление вложений
         AddAttachments(body, mainContentType.Boundary);
         // Если после добавления вложений текст письма не изменился
         // значит письмо имеет пустой текст
         if (Body == body)
         {
             Body = "";
         }
     }
     if (mainContentType.MediaType == "multipart/alternative")
     {
         // Добавление альтернативных способов представления текста письма
         AddViews(body, mainContentType.Boundary);
     }
     // Декодирование текста письма
     Body = ParserMessage.GetCodeLine(Body, BodyEncoding, BodyTransferEncoding);
 }
コード例 #6
0
        // Команда получения количества писем в папке
        public int MessInFolder(string path)
        {
            int num = 0;

            if (Connected)
            {
                string _cmd   = "STATUS " + path + " (messages)";
                string answer = SRComand(_cmd);
                if (answer.Contains("OK"))
                {
                    num = ParserMessage.GetNumberMess(answer);
                }
                else
                {
                    throw new Exception("Ошибка загрузки количества писем в почтовом ящике");
                }
            }
            else
            {
                throw new Exception("Нет соединения");
            }
            return(num);
        }
コード例 #7
0
        // Создание письма с заголовком
        public MyMailMessage(string header) : base()
        {
            Headers.Add("main", header.Substring(header.IndexOf("\r\n") + 2));
            num    = Convert.ToInt32(ParserMessage.FirstFromTo(header, " ", " "));
            id     = ParserMessage.GetID(header);
            Sender = From = ParserMessage.GetFrom(header);
            MailAddressCollection temp = ParserMessage.GetTo(header);

            foreach (MailAddress adr in temp)
            {
                To.Add(adr);
            }
            Subject = ParserMessage.GetSubject(header);
            temp    = ParserMessage.GetReply(header);
            foreach (MailAddress adr in temp)
            {
                ReplyToList.Add(adr);
            }
            temp = ParserMessage.GetCC(header);
            foreach (MailAddress adr in temp)
            {
                CC.Add(adr);
            }
            temp = ParserMessage.GetBcc(header);
            foreach (MailAddress adr in temp)
            {
                Bcc.Add(adr);
            }
            date                 = ParserMessage.GetDate(header);
            displayDate          = new DateString(date);
            mainContentType      = ParserMessage.GetContentType(header);
            BodyEncoding         = ParserMessage.MyGetEncoding(mainContentType.CharSet);
            BodyTransferEncoding = ParserMessage.GetBodyTransfer(header);
            isHaveAttachments    = (mainContentType.MediaType == "multipart/mixed" || mainContentType.MediaType == "multipart/related");
            IsBodyHtml           = (mainContentType.MediaType == MediaTypeNames.Text.Html);
            myAttachments        = new List <MyAttachment>();
        }
コード例 #8
0
        // Метод получения вложения
        private void GetAttach(string text)
        {
            // Получение заголовка вложения
            string header = text.Substring(0, text.IndexOf("\r\n\r\n"));
            // Получение тела вложения
            string body = text.Substring(text.IndexOf("\r\n\r\n") + 4);
            // Тип контента вложения
            ContentType ct = ParserMessage.GetContentType(header);
            // Расположение контента
            ContentDisposition cd = ParserMessage.GetDisposition(header);
            // Получение транспортной кодировки
            TransferEncoding transEncode = ParserMessage.GetBodyTransfer(header);

            // Декодирование строки с именем вложения
            if (ct.Name != null)
            {
                ct.Name = ParserMessage.DecodeString(ct.Name);
            }
            // Добавление вложения внутри вложения
            if (ct.MediaType == "multipart/mixed" || ct.MediaType == "multipart/related")
            {
                AddAttachments(body, ct.Boundary);
            }
            // Получение текста письма в формате html-страницы
            else if (ct.MediaType == MediaTypeNames.Text.Html)
            {
                if (cd == null)
                {
                    BodyEncoding         = ParserMessage.MyGetEncoding(ct.CharSet);
                    BodyTransferEncoding = transEncode;
                    Body       = body;
                    IsBodyHtml = true;
                }
                else if (cd.DispositionType != DispositionTypeNames.Attachment)
                {
                    BodyEncoding         = ParserMessage.MyGetEncoding(ct.CharSet);
                    BodyTransferEncoding = transEncode;
                    Body       = body;
                    IsBodyHtml = true;
                }
            }
            // Получение текста письма в виде обычного текста
            else if (ct.MediaType == MediaTypeNames.Text.Plain && !IsBodyHtml)
            {
                if (cd == null)
                {
                    BodyEncoding         = ParserMessage.MyGetEncoding(ct.CharSet);
                    BodyTransferEncoding = transEncode;
                    Body = body;
                }
                else if (cd.DispositionType != DispositionTypeNames.Attachment)
                {
                    BodyEncoding         = ParserMessage.MyGetEncoding(ct.CharSet);
                    BodyTransferEncoding = transEncode;
                    Body = body;
                }
            }
            // Добавление альтернативных способов представления текста письма
            else if (ct.MediaType == "multipart/alternative")
            {
                AddViews(body, ct.Boundary);
            }
            // Декодирование тела вложения и добавление в список
            else
            {
                body = ParserMessage.GetCodeLine(body, Encoding.Default, transEncode);
                myAttachments.Add(new MyAttachment(ct, body));
            }
        }