public static string Parse(FileStream file) { MsgReader.Reader read = new Reader(); string retVal = ""; try { using (MemoryStream ms = new MemoryStream()) { if (file.Name.ToLower().EndsWith("eml")) { file.CopyTo(ms); MsgReader.Mime.Message msg = new MsgReader.Mime.Message(ms.ToArray()); retVal += "From: " + (msg.Headers.From == null ? "" : msg.Headers.From.DisplayName) + Environment.NewLine; retVal += "To: " + ParseAddresses(msg.Headers.To) + Environment.NewLine; retVal += "Cc: " + ParseAddresses(msg.Headers.Cc) + Environment.NewLine; retVal += "Bcc: " + ParseAddresses(msg.Headers.Bcc) + Environment.NewLine; retVal += "Subject: " + msg.Headers.Subject + Environment.NewLine; retVal += msg.TextBody.GetBodyAsText(); } else if (file.Name.ToLower().EndsWith("msg")) { MsgReader.Outlook.Storage.Message msg = new MsgReader.Outlook.Storage.Message(file, FileAccess.Read); retVal += "From: " + (msg.Sender == null ? "" : msg.Sender.DisplayName + " " + msg.Sender.Email) + Environment.NewLine; foreach (MsgReader.Outlook.Storage.Recipient rec in msg.Recipients) { retVal += "To: " + rec.DisplayName + " " + rec.Email + Environment.NewLine; } retVal += "Subject: " + msg.Subject + Environment.NewLine; retVal += msg.BodyText; foreach (MsgReader.Outlook.Storage.Attachment a in msg.Attachments) { string fileName = DateTime.Now.Ticks.ToString() + a.FileName; File.WriteAllBytes(_tmpFilesFolder + "\\" + fileName, a.Data); FileInfo f = new FileInfo(fileName); retVal += fileName + ": " + FileUtils.ParseSync(new FileInfo(_tmpFilesFolder + "\\" + fileName)); } } } } catch (Exception ex) { ParsersInfra.RecordParsingFailure(Log, ex, file); } return(retVal); }
protected override void Execute(CodeActivityContext context) { string filePath = FilePath.Get(context); MsgReader.Mime.Message mailObject = null; string message = null; try { if (File.Exists(filePath)) { if (Path.GetExtension(filePath).ToLower() == ".eml") { Stream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); mailObject = MsgReader.Mime.Message.Load(stream); MailObject.Set(context, mailObject); stream.Dispose(); if (MailObject != null) { message = "Success"; } } } else { message = "File doesnot exist"; } } catch (Exception ex) { message = ex.Message; } finally { Message.Set(context, message); mailObject = null; } }
public string Read(string file) { Preconditions.CheckArgument(file); Preconditions.CheckArgument(htmlMessageTemplate); FileInfo inFile = new FileInfo(file); if (!inFile.Exists) { throw new FileNotFoundException("Input Excel file not found.", file); } string ext = Path.GetExtension(inFile.FullName); if (ext.ToLower().CompareTo(".msg") == 0) { MsgReader.Outlook.Storage.Message message = new MsgReader.Outlook.Storage.Message(file); MatchCollection matches = Regex.Matches(htmlMessageTemplate, FIELD_REGEX); if (matches != null && matches.Count > 0) { string html = new string(htmlMessageTemplate.ToCharArray()); string htmlBody = null; foreach (Match match in matches) { string k = match.Groups[1].Value; string v = match.Groups[2].Value; string t = null; if (v.CompareTo(FIELD_BCC) == 0) { t = message.GetEmailRecipients(MsgReader.Outlook.RecipientType.Bcc, true, true); } else if (v.CompareTo(FIELD_CC) == 0) { t = message.GetEmailRecipients(MsgReader.Outlook.RecipientType.Cc, true, true); } else if (v.CompareTo(FIELD_TO) == 0) { t = message.GetEmailRecipients(MsgReader.Outlook.RecipientType.To, true, true); } else if (v.CompareTo(FIELD_FROM) == 0) { t = message.GetEmailSender(true, true); } else if (v.CompareTo(FIELD_RECEIVED) == 0) { DateTime dt = (DateTime)message.ReceivedOn; t = dt.ToString(dateFormat); } else if (v.CompareTo(FIELD_SENT) == 0) { DateTime dt = (DateTime)message.SentOn; t = dt.ToString(dateFormat); } else if (v.CompareTo(FIELD_SUBJECT) == 0) { t = message.Subject; } else if (v.CompareTo(FIELD_BODY) == 0) { if (message.BodyHtml != null) { htmlBody = message.BodyHtml; continue; } else { t = message.BodyText; } } if (!String.IsNullOrEmpty(t)) { t = String.Format("{0}{1}", k, t); html = ReplaceMatch(html, match, t); } } return(PostProcess(html, htmlBody)); } } else { MsgReader.Mime.Message message = MsgReader.Mime.Message.Load(inFile); MatchCollection matches = Regex.Matches(htmlMessageTemplate, FIELD_REGEX); if (matches != null && matches.Count > 0) { string html = new string(htmlMessageTemplate.ToCharArray()); string htmlBody = null; foreach (Match match in matches) { string k = match.Groups[1].Value; string v = match.Groups[2].Value; string t = null; if (v.CompareTo(FIELD_BCC) == 0) { t = GetRecepientsString(message.Headers.Bcc); } else if (v.CompareTo(FIELD_CC) == 0) { t = GetRecepientsString(message.Headers.Cc); } else if (v.CompareTo(FIELD_TO) == 0) { t = GetRecepientsString(message.Headers.To); } else if (v.CompareTo(FIELD_FROM) == 0) { t = EmailAddressString(message.Headers.From); } else if (v.CompareTo(FIELD_RECEIVED) == 0) { // TODO: Need to fix this. DateTime dt = DateTime.Now; t = dt.ToString(dateFormat); } else if (v.CompareTo(FIELD_SENT) == 0) { DateTime dt = (DateTime)message.Headers.DateSent; t = dt.ToString(dateFormat); } else if (v.CompareTo(FIELD_SUBJECT) == 0) { t = message.Headers.Subject; } else if (v.CompareTo(FIELD_BODY) == 0) { if (message.HtmlBody != null) { htmlBody = message.HtmlBody.GetBodyAsText(); continue; } else { t = message.TextBody.GetBodyAsText(); } } if (!String.IsNullOrEmpty(t)) { t = String.Format("{0}{1}", k, t); html = ReplaceMatch(html, match, t); } } return(PostProcess(html, htmlBody)); } } return(null); }