示例#1
0
        public static void DecodeMailBody(string body, EmailModel email)
        {
            var emailBody = email.IsMultipart
                ? ProcessMailPartsRecursively(body, email.Boundary)
                : ProcessSinglePartEmail(body, email);

            if (emailBody == null) return;

            switch (emailBody.ContentEncoding.ToLower())
            {
                case "quoted-printable":
                    emailBody.Content = emailBody.Content.DecodeQuotedPrintable(emailBody.Charset);
                    break;

                case "base64":
                    emailBody.Content = emailBody.Content.DecodeBase64(emailBody.Charset);
                    break;

                default:
                    emailBody.Content = emailBody.Content;
                    break;
            }

            FixEmailBody(emailBody);

            if (string.IsNullOrEmpty(email.Charset))
            {
                emailBody.Content = ChangeEncoding(emailBody.Content, Encoding.UTF8, Encoding.GetEncoding(emailBody.Charset));
            }

            email.Charset = emailBody.Charset;
            email.Body = emailBody.Content;
        }
示例#2
0
 public override void FetchMailBody(EmailModel email)
 {
     if (Account.DeleteReadEmails)
     {
         SendCommandAsync(new Pop3DeleteCommand(email.Id, null));
     }
 }
        public override void ParseResponseDetails(string message)
        {
            base.ParseResponseDetails(message);

            if (Status != "OK") return;

            var contentType = Body.GetHeaderValue("content-type");

            Email = new EmailModel
            {
                Date = Body.GetHeaderValue("date").ParseDateString(),
                Subject = Body.GetHeaderValue("subject").DecodeEncodedWord().ReplaceAllNewLines(),
                From = Body.GetHeaderValue("from").DecodeEncodedWord(),
                Boundary = Body.GetHeaderValue("content-type", "boundary"),
                ContentTransferEncoding = Body.GetHeaderValue("content-transfer-encoding"),
                ContentType = contentType,
                Charset = Body.GetHeaderValue("content-type", "charset"),
                IsMultipart = contentType.ToLowerInvariant().Contains("multipart/")
            };
        }
示例#4
0
        public override void ParseResponseDetails(string message)
        {
            var match = new Regex("(?<headers>.*?)\\r\\n\\r\\n(?<body>.*)\\.", RegexOptions.Singleline).Match(message);

            var headerSection = match.Groups["headers"].Value;
            var bodySection = match.Groups["body"].Value;

            var contentType = message.GetHeaderValue("content-type");

            Email = new EmailModel
            {
                Date = headerSection.GetHeaderValue("date").ParseDateString(),
                Subject = headerSection.GetHeaderValue("subject").DecodeEncodedWord().ReplaceAllNewLines(),
                From = headerSection.GetHeaderValue("from").DecodeEncodedWord(),
                Boundary = headerSection.GetHeaderValue("content-type", "boundary"),
                ContentTransferEncoding = headerSection.GetHeaderValue("content-transfer-encoding"),
                ContentType = contentType,
                Charset = headerSection.GetHeaderValue("content-type", "charset"),
                IsMultipart = contentType.ToLowerInvariant().Contains("multipart/")
            };

            EmailDecodingHelper.DecodeMailBody(bodySection, Email);
        }
示例#5
0
 public FetchMailBodyEvent(EmailModel email)
 {
     Email = email;
 }
示例#6
0
 public ShowMailWindowEvent(EmailModel email)
 {
     Email = email;
 }
示例#7
0
 public override void FetchMailBody(EmailModel email)
 {
     SendCommandAsync(new ImapFetchMailBodyCommand(email, r => EmailDecodingHelper.DecodeMailBody(r.MailBody, email)));
 }
 public abstract void FetchMailBody(EmailModel email);
示例#9
0
 private static EmailBody ProcessSinglePartEmail(string body, EmailModel email)
 {
     return new EmailBody
         {
             Content = body,
             ContentEncoding = email.ContentTransferEncoding,
             ContentType = email.ContentType,
             Charset = email.Charset
         };
 }
示例#10
0
 public MarkMailAsReadEvent(EmailModel email)
 {
     Email = email;
 }
示例#11
0
 public void FromEmailModel(EmailModel model)
 {
     Id = model.Id;
     AccountId = model.AccountId;
     Subject = model.Subject;
     Boundary = model.Boundary;
     ContentTransferEncoding = model.ContentTransferEncoding;
     ContentType = model.ContentType;
     Charset = model.Charset;
     IsMultipart = model.IsMultipart;
     Date = model.Date;
     From = model.From;
     MessageId = model.MessageId;
     InReplyTo = model.InReplyTo;
     Body = model.Body;
     IsRead = model.IsRead;
 }
示例#12
0
 public SerializableEmailModel(EmailModel emailModel)
 {
     FromEmailModel(emailModel);
 }