Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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);
        }