protected void CreateRightResult(Message eml_message, string out_file_path)
        {
            var result = new RightParserResult();
            result.From = new TestAddress();

            result.From.Email = eml_message.From.Email;
            result.From.Name = eml_message.From.Name;

            result.To = new List<TestAddress>();
            foreach (var to_adresses in eml_message.To)
            {
                result.To.Add(new TestAddress {Name = to_adresses.Name, Email = to_adresses.Email});
            }

            result.Cc = new List<TestAddress>();
            foreach (var cc_adresses in eml_message.Cc)
            {
                result.Cc.Add(new TestAddress {Name = cc_adresses.Name, Email = cc_adresses.Email});
            }

            result.Subject = eml_message.Subject;
            result.AttachmentCount = eml_message.Attachments.Count;
            result.UnknownPatsCount = eml_message.UnknownDispositionMimeParts.Count;

            result.HtmlBody = eml_message.BodyHtml.Text;
            result.HtmlCharset = eml_message.BodyHtml.Charset;
            result.HtmlEncoding = eml_message.BodyHtml.ContentTransferEncoding;

            result.TextBody = eml_message.BodyText.Text;
            result.TextCharset = eml_message.BodyText.Charset;
            result.TextEncoding = eml_message.BodyText.ContentTransferEncoding;

            result.ToXml(out_file_path);
        }
        protected void Test(string eml_file_name)
        {
            var eml_message  = Parser.ParseMessageFromFile(TestFolderPath + eml_file_name);
            var right_result = RightParserResult.FromXml(RightParserResultsPath + eml_file_name.Replace(".eml", ".xml"));

#if NEED_OUT
            eml_message.StoreToFile(test_results_path + eml_file_name);
#endif
            Assert.AreEqual(right_result.From.Email, eml_message.From.Email);
            Assert.AreEqual(right_result.From.Name, eml_message.From.Name);
            Assert.AreEqual(right_result.To.Count, eml_message.To.Count);

            var to_enumerator = eml_message.To.OrderBy(x => x.Email).GetEnumerator();
            foreach (var adress in right_result.To.OrderBy(x => x.Email))
            {
                to_enumerator.MoveNext();
                Assert.AreEqual(adress.Email, to_enumerator.Current.Email);
                Assert.AreEqual(adress.Name, to_enumerator.Current.Name);
            }

            var cc_enumerator = eml_message.Cc.OrderBy(x => x.Email).GetEnumerator();
            foreach (var adress in right_result.Cc.OrderBy(x => x.Email))
            {
                cc_enumerator.MoveNext();
                Assert.AreEqual(adress.Email, cc_enumerator.Current.Email);
                Assert.AreEqual(adress.Name, cc_enumerator.Current.Name);
            }

            Assert.AreEqual(right_result.Subject, eml_message.Subject);
            Assert.AreEqual(right_result.AttachmentCount, eml_message.Attachments.Count);
            Assert.AreEqual(right_result.UnknownPatsCount, eml_message.UnknownDispositionMimeParts.Count);

            //Replace needed for correct file loading
            Assert.AreEqual(right_result.HtmlBody, eml_message.BodyHtml.Text);
            Assert.AreEqual(right_result.HtmlEncoding, eml_message.BodyHtml.ContentTransferEncoding);
            Assert.AreEqual(right_result.HtmlCharset, eml_message.BodyHtml.Charset);

            Assert.AreEqual(right_result.TextBody, eml_message.BodyText.Text);
            Assert.AreEqual(right_result.TextCharset, eml_message.BodyText.Charset);
            Assert.AreEqual(right_result.TextEncoding, eml_message.BodyText.ContentTransferEncoding);
        }
        protected void Test(string emlFileName)
        {
            var mimeMessage = MailClient.ParseMimeMessage(TestFolderPath + emlFileName);
            var emlMessage  = ConvertToRightResult(mimeMessage);
            var rightResult = RightParserResult.FromXml(RightParserResultsPath + emlFileName.Replace(".eml", ".xml"));

#if NEED_OUT
            mimeMessage.WriteTo(TestFolderPath + emlFileName);
#endif
            Assert.AreEqual(rightResult.From.Email, emlMessage.From.Email);
            Assert.AreEqual(rightResult.From.Name, emlMessage.From.Name);
            Assert.AreEqual(rightResult.To.Count, emlMessage.To.Count);

            var toEnumerator = emlMessage.To.OrderBy(x => x.Email).GetEnumerator();
            foreach (var adress in rightResult.To.OrderBy(x => x.Email))
            {
                toEnumerator.MoveNext();
                Assert.AreEqual(adress.Email, toEnumerator.Current.Email);
                Assert.AreEqual(adress.Name, toEnumerator.Current.Name);
            }

            var ccEnumerator = emlMessage.Cc.OrderBy(x => x.Email).GetEnumerator();
            foreach (var adress in rightResult.Cc.OrderBy(x => x.Email))
            {
                ccEnumerator.MoveNext();
                Assert.AreEqual(adress.Email, ccEnumerator.Current.Email);
                Assert.AreEqual(adress.Name, ccEnumerator.Current.Name);
            }

            Assert.AreEqual(rightResult.Subject, emlMessage.Subject);
            Assert.AreEqual(rightResult.AttachmentCount, emlMessage.AttachmentCount);
            //Assert.AreEqual(rightResult.UnknownPatsCount, emlMessage.UnknownDispositionMimeParts.Count);

            Assert.AreEqual(rightResult.TextBody, emlMessage.TextBody);
            Assert.AreEqual(rightResult.TextCharset, emlMessage.TextCharset);
            //Assert.AreEqual(rightResult.TextContentDisposition, emlMessage.TextContentDisposition);

            Assert.AreEqual(rightResult.HtmlBody, emlMessage.HtmlBody);
            Assert.AreEqual(rightResult.HtmlCharset, emlMessage.HtmlCharset);
            //Assert.AreEqual(rightResult.HtmlContentDisposition, emlMessage.HtmlContentDisposition);
        }
        protected void CreateRightResult(Message eml_message, string out_file_path)
        {
            var result = new RightParserResult();

            result.From = new TestAddress();

            result.From.Email = eml_message.From.Email;
            result.From.Name  = eml_message.From.Name;

            result.To = new List <TestAddress>();
            foreach (var to_adresses in eml_message.To)
            {
                result.To.Add(new TestAddress {
                    Name = to_adresses.Name, Email = to_adresses.Email
                });
            }

            result.Cc = new List <TestAddress>();
            foreach (var cc_adresses in eml_message.Cc)
            {
                result.Cc.Add(new TestAddress {
                    Name = cc_adresses.Name, Email = cc_adresses.Email
                });
            }

            result.Subject          = eml_message.Subject;
            result.AttachmentCount  = eml_message.Attachments.Count;
            result.UnknownPatsCount = eml_message.UnknownDispositionMimeParts.Count;

            result.HtmlBody     = eml_message.BodyHtml.Text;
            result.HtmlCharset  = eml_message.BodyHtml.Charset;
            result.HtmlEncoding = eml_message.BodyHtml.ContentTransferEncoding;

            result.TextBody     = eml_message.BodyText.Text;
            result.TextCharset  = eml_message.BodyText.Charset;
            result.TextEncoding = eml_message.BodyText.ContentTransferEncoding;

            result.ToXml(out_file_path);
        }
        protected RightParserResult ConvertToRightResult(MimeMessage emlMessage)
        {
            var from = emlMessage.From.Mailboxes.FirstOrDefault();

            var result = new RightParserResult
            {
                From = new TestAddress
                {
                    Email = from == null ? "" : from.Address,
                    Name  = from == null ? "" : from.Name
                },
                To = new List <TestAddress>()
            };

            foreach (var toAdresses in emlMessage.To.Mailboxes)
            {
                result.To.Add(new TestAddress {
                    Name = toAdresses.Name, Email = toAdresses.Address
                });
            }

            result.Cc = new List <TestAddress>();
            foreach (var ccAdresses in emlMessage.Cc.Mailboxes)
            {
                result.Cc.Add(new TestAddress {
                    Name = ccAdresses.Name, Email = ccAdresses.Address
                });
            }

            result.Subject         = emlMessage.Subject;
            result.AttachmentCount = emlMessage.Attachments.Count();

            //result.UnknownPatsCount = emlMessage.Body.;

            result.TextBody = emlMessage.TextBody ?? "";
            result.HtmlBody = emlMessage.HtmlBody ?? "";

            var bodyParts = emlMessage.BodyParts;

            var mimeEntities = bodyParts as IList <MimeEntity> ?? bodyParts.ToList();
            var textPart     = mimeEntities.FirstOrDefault(b => b.ContentType.MimeType == "text/plain") as TextPart;
            var htmlPart     = mimeEntities.FirstOrDefault(b => b.ContentType.MimeType == "text/html") as TextPart;

            var internalMessages = mimeEntities.Where(t => t.ContentType.IsMimeType("message", "*")).ToList();

            if (internalMessages.Any())
            {
                result.AttachmentCount += internalMessages.Count();
            }

            if (textPart != null)
            {
                if (textPart.ContentType.Charset != null)
                {
                    var encoding = EncodingTools.GetEncodingByCodepageName(textPart.ContentType.Charset);

                    if (!encoding.HeaderName.Equals(textPart.ContentType.Charset,
                                                    StringComparison.InvariantCultureIgnoreCase))
                    {
                        result.TextBody    = textPart.GetText(encoding);
                        result.TextCharset = encoding.HeaderName.ToLowerInvariant();
                    }
                    else
                    {
                        result.TextCharset = textPart.ContentType.Charset.ToLowerInvariant();
                    }
                }
                else
                {
                    //TODO: Try to find charset in other parts and detect encoding and right text
                    result.TextCharset = "utf-8";
                }
            }
            else
            {
                result.TextCharset = "utf-8";
            }

            if (htmlPart != null)
            {
                if (htmlPart.ContentType.Charset != null)
                {
                    var encoding = EncodingTools.GetEncodingByCodepageName(htmlPart.ContentType.Charset);

                    if (!encoding.HeaderName.Equals(htmlPart.ContentType.Charset,
                                                    StringComparison.InvariantCultureIgnoreCase))
                    {
                        result.HtmlBody    = htmlPart.GetText(encoding);
                        result.HtmlCharset = htmlPart.ContentType.Charset;
                    }
                    else
                    {
                        result.HtmlCharset = htmlPart.ContentType.Charset.ToLowerInvariant();
                    }
                }
                else
                {
                    //TODO: Try to find charset in other parts and detect encoding and right text
                    result.HtmlCharset = "utf-8";
                }
            }
            else
            {
                result.HtmlCharset = "utf-8";
            }

            return(result);
        }