// Метод получения альтернативного способа просмотра письма 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; } } }
// Создание письма с заголовком 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>(); }
// Метод получения вложения 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)); } }