private static PurchaseEmail _GenerateHtmlForEmail(string htmlName, string emlFile, string tempFolder, PurchaseEmail currentHtMLEmail) { Mail oMail = new Mail("TryIt"); oMail.Load(emlFile, false); if (oMail.IsEncrypted) { try { // This email is encrypted, we decrypt it by user default certificate. oMail = oMail.Decrypt(null); } catch (Exception ep) { MessageBox.Show(ep.Message); oMail.Load(emlFile, false); } } if (oMail.IsSigned) { try { // This email is digital signed. EAGetMail.Certificate cert = oMail.VerifySignature(); //Console.WriteLine("This email contains a valid digital signature."); } catch (Exception ep) { MessageBox.Show(ep.Message); } } // Parse html body string html = oMail.HtmlBody; var hdr = new StringBuilder(); // Parse sender hdr.Append("<font face=\"Courier New,Arial\" size=2>"); hdr.Append("<b>From:</b> " + _FormatHtmlTag(oMail.From.ToString()) + "<br>"); // Parse to MailAddress[] addrs = oMail.To; int count = addrs.Length; if (count > 0) { hdr.Append("<b>To:</b> "); for (int i = 0; i < count; i++) { hdr.Append(_FormatHtmlTag(addrs[i].ToString())); if (i < count - 1) { hdr.Append(";"); } } hdr.Append("<br>"); } // Parse cc addrs = oMail.Cc; count = addrs.Length; if (count > 0) { hdr.Append("<b>Cc:</b> "); for (int i = 0; i < count; i++) { hdr.Append(_FormatHtmlTag(addrs[i].ToString())); if (i < count - 1) { hdr.Append(";"); } } hdr.Append("<br>"); } hdr.Append(String.Format("<b>Subject:</b>{0}<br>\r\n", _FormatHtmlTag(oMail.Subject))); // Parse attachments and save to local folder Attachment[] atts = oMail.Attachments; count = atts.Length; if (count > 0) { if (!Directory.Exists(tempFolder)) Directory.CreateDirectory(tempFolder); hdr.Append("<b>Attachments:</b>"); for (int i = 0; i < count; i++) { Attachment att = atts[i]; // this attachment is in OUTLOOK RTF format, decode it here. if (String.Compare(att.Name, "winmail.dat") == 0) { Attachment[] tatts = null; try { tatts = Mail.ParseTNEF(att.Content, true); } catch (Exception ep) { Console.WriteLine(ep.Message); continue; } int y = tatts.Length; for (int x = 0; x < y; x++) { Attachment tatt = tatts[x]; string tattname = String.Format("{0}\\{1}", tempFolder, tatt.Name); tatt.SaveAs(tattname, true); hdr.Append( String.Format("<a href=\"{0}\" target=\"_blank\">{1}</a> ", tattname, tatt.Name)); } continue; } string attname = String.Format("{0}\\{1}", tempFolder, att.Name); att.SaveAs(attname, true); hdr.Append(String.Format("<a href=\"{0}\" target=\"_blank\">{1}</a> ", attname, att.Name)); if (att.ContentID.Length > 0) { // Show embedded images. html = html.Replace("cid:" + att.ContentID, attname); } else if (String.Compare(att.ContentType, 0, "image/", 0, "image/".Length, true) == 0) { // show attached images. html = html + String.Format("<hr><img src=\"{0}\">", attname); } } } var reg = new Regex("(<meta[^>]*charset[ \t]*=[ \t\"]*)([^<> \r\n\"]*)", RegexOptions.Multiline | RegexOptions.IgnoreCase); html = reg.Replace(html, "$1utf-8"); if (!reg.IsMatch(html)) { hdr.Insert(0, "<meta HTTP-EQUIV=\"Content-Type\" Content=\"text-html; charset=utf-8\">"); } // write html to file html = hdr.ToString() + "<hr>" + html; //Save the html file to the html directory var newHtmlLocation = Directory.GetCurrentDirectory(); newHtmlLocation = String.Format("{0}\\htmlInbox", newHtmlLocation); string newFileName = htmlName.Split('\\').Last(); htmlName = newHtmlLocation + "\\" + newFileName; // Parse out song title string pattern = "<div style=\"font-family: verdana,arial,helvetica,sans-serif; font-weight: bold;\">(.*)</div>"; MatchCollection matches = Regex.Matches(html, pattern); string songTitle = matches[0].Groups[1].ToString(); currentHtMLEmail.fileName = newFileName; currentHtMLEmail.htmlPath = htmlName; currentHtMLEmail.title = songTitle; // save html file var fs = new FileStream(htmlName, FileMode.Create, FileAccess.Write, FileShare.None); byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(html); fs.Write(data, 0, data.Length); fs.Close(); oMail.Clear(); return currentHtMLEmail; }
private static PurchaseEmail ConvertMailToHtml(string fileName) { var currentHtMLEmail = new PurchaseEmail(); try { int pos = fileName.LastIndexOf("."); string mainName = fileName.Substring(0, pos); string htmlName = mainName + ".htm"; string htmlFolder = mainName; if (!File.Exists(htmlName)) { // We haven't generate the html for this email, generate it now. currentHtMLEmail = _GenerateHtmlForEmail(htmlName, fileName, htmlFolder, currentHtMLEmail); } //Console.WriteLine("Please open {0} to browse your email", htmlName); } catch (Exception ep) { MessageBox.Show(ep.Message); } return currentHtMLEmail; }