/// <summary> /// Writes the body of the EML E-mail to html or text and extracts all the attachments. The /// result is returned as a List of strings /// </summary> /// <param name="message">The <see cref="Mime.Message"/> object</param> /// <param name="outputFolder">The folder where we need to write the output</param> /// <param name="hyperlinks">When true then hyperlinks are generated for the To, CC, BCC and attachments</param> /// <returns></returns> private List<string> WriteEmlEmail(Mime.Message message, string outputFolder, bool hyperlinks) { var fileName = "email"; bool htmlBody; string body; List<string> attachmentList; List<string> files; PreProcessEmlFile(message, hyperlinks, outputFolder, ref fileName, out htmlBody, out body, out attachmentList, out files); if (!htmlBody) hyperlinks = false; var maxLength = 0; // Calculate padding width when we are going to write a text file if (!htmlBody) { var languageConsts = new List<string> { #region LanguageConsts LanguageConsts.EmailFromLabel, LanguageConsts.EmailSentOnLabel, LanguageConsts.EmailToLabel, LanguageConsts.EmailCcLabel, LanguageConsts.EmailBccLabel, LanguageConsts.EmailSubjectLabel, LanguageConsts.ImportanceLabel, LanguageConsts.EmailAttachmentsLabel, #endregion }; maxLength = languageConsts.Select(languageConst => languageConst.Length).Concat(new[] { 0 }).Max() + 2; } var emailHeader = new StringBuilder(); var headers = message.Headers; // Start of table WriteHeaderStart(emailHeader, htmlBody); // From var from = string.Empty; if (headers.From != null) from = message.GetEmailAddresses(new List<RfcMailAddress> { headers.From }, hyperlinks, htmlBody); WriteHeaderLineNoEncoding(emailHeader, htmlBody, maxLength, LanguageConsts.EmailFromLabel, from); // Sent on WriteHeaderLine(emailHeader, htmlBody, maxLength, LanguageConsts.EmailSentOnLabel, (message.Headers.DateSent.ToLocalTime()).ToString(LanguageConsts.DataFormatWithTime)); // To WriteHeaderLineNoEncoding(emailHeader, htmlBody, maxLength, LanguageConsts.EmailToLabel, message.GetEmailAddresses(headers.To, hyperlinks, htmlBody)); // CC var cc = message.GetEmailAddresses(headers.Cc, hyperlinks, htmlBody); if (!string.IsNullOrEmpty(cc)) WriteHeaderLineNoEncoding(emailHeader, htmlBody, maxLength, LanguageConsts.EmailCcLabel, cc); // BCC var bcc = message.GetEmailAddresses(headers.Bcc, hyperlinks, htmlBody); if (!string.IsNullOrEmpty(bcc)) WriteHeaderLineNoEncoding(emailHeader, htmlBody, maxLength, LanguageConsts.EmailBccLabel, bcc); // Subject var subject = message.Headers.Subject ?? string.Empty; WriteHeaderLine(emailHeader, htmlBody, maxLength, LanguageConsts.EmailSubjectLabel, subject); // Urgent var importanceText = string.Empty; switch (message.Headers.Importance) { case MailPriority.Low: importanceText = LanguageConsts.ImportanceLowText; break; case MailPriority.Normal: importanceText = LanguageConsts.ImportanceNormalText; break; case MailPriority.High: importanceText = LanguageConsts.ImportanceHighText; break; } if (!string.IsNullOrEmpty(importanceText)) { WriteHeaderLine(emailHeader, htmlBody, maxLength, LanguageConsts.ImportanceLabel, importanceText); // Empty line WriteHeaderEmptyLine(emailHeader, htmlBody); } // Attachments if (attachmentList.Count != 0) WriteHeaderLineNoEncoding(emailHeader, htmlBody, maxLength, LanguageConsts.EmailAttachmentsLabel, string.Join(", ", attachmentList)); // Empty line WriteHeaderEmptyLine(emailHeader, htmlBody); // End of table + empty line WriteHeaderEnd(emailHeader, htmlBody); body = InjectHeader(body, emailHeader.ToString()); // Write the body to a file File.WriteAllText(fileName, body, Encoding.UTF8); return files; }