Skip to content

Commit 94f3eb1

Browse files
Change the parser to consider Image content block
Created unit test to reproduce and resolve problem when lib parse email with image body block.
1 parent fdbaa5a commit 94f3eb1

5 files changed

Lines changed: 4888 additions & 6 deletions

File tree

Class Library/ActiveUp.Net.Common/Parser.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -279,9 +279,6 @@ private static void DispatchPart(MimePart part, ref Message message)
279279
string toDigest = part.Container.TextContent;
280280
toDigest = Regex.Split(toDigest, "\r\n--" + part.Container.ContentType.Parameters["boundary"])[1];
281281
toDigest = toDigest.TrimStart('\r', '\n');
282-
//Match endDelimiter = Regex.Match(toDigest, "(?<=[^\r\n]\r\n)\r\n", RegexOptions.RightToLeft);
283-
//int lastNonNewLine = Regex.Match(toDigest, "[^\r\n]", RegexOptions.RightToLeft).Index;
284-
//if (endDelimiter.Index != -1 && endDelimiter.Index > lastNonNewLine) toDigest = toDigest.Remove(endDelimiter.Index);
285282

286283
//TODO: What should be done in PPC ?
287284
#if !PocketPC
@@ -302,7 +299,8 @@ private static void DispatchPart(MimePart part, ref Message message)
302299
private static void DecodePartBody(ref MimePart part)
303300
{
304301
// Let's see if a charset is specified. Otherwise we default to "iso-8859-1".
305-
string charset = (!string.IsNullOrEmpty(part.Charset) ? part.Charset : "iso-8859-1");
302+
var charset = (!string.IsNullOrEmpty(part.Charset) ? part.Charset : "iso-8859-1");
303+
306304
#if PocketPC
307305
if (charset.ToLower() == "iso-8859-1")
308306
charset = "windows-1252";
@@ -522,17 +520,26 @@ public static MimePart ParseMimePart(byte[] binaryData, Message message)
522520
// Build the part tree.
523521
// This is a container part.
524522
if (part.ContentType.Type.ToLower().Equals("multipart"))
523+
{
525524
ParseSubParts(ref part, message);
525+
}
526526
// This is a nested message.
527527
else if (part.ContentType.Type.ToLower().Equals("message"))
528528
{
529529
// TODO: Create an interpreter to this.
530530
}
531+
// This is a image block.
532+
else if (part.ContentType.Type.ToLower().Equals("image"))
533+
{
534+
DispatchPart(part, ref message);
535+
}
531536
else
537+
{
532538
DecodePartBody(ref part);
539+
}
533540

534-
if (BodyParsed != null)
535-
BodyParsed(null, message);
541+
// Call event id BodyParsed is not null.
542+
BodyParsed?.Invoke(null, message);
536543
}
537544
}
538545
catch (Exception ex)

Class Library/ActiveUp.Net.Tests/ActiveUp.Net.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@
104104
<None Include="resource\confirm_read_parse_problem.eml">
105105
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
106106
</None>
107+
<None Include="resource\image-as-body-part.eml">
108+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
109+
</None>
107110
<None Include="resource\multipart_with_type_using_camel_case.eml">
108111
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
109112
</None>

Class Library/ActiveUp.Net.Tests/Common/ParserTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,5 +169,19 @@ public void MustParseInvalidConfirmReadReturnReceipt()
169169
Assert.IsNull(message.ReturnReceipt);
170170
Assert.AreEqual(0, message.Recipients.Count);
171171
}
172+
173+
174+
[Test(Description = "")]
175+
public void MustParseImageAsPartOfEmailBody()
176+
{
177+
var message = Parser.ParseMessageFromFile("resource\\image-as-body-part.eml");
178+
Assert.AreEqual("CAM3z=h1WB0qSZPU+PWL5VqxsL1k1gmh0pmJivD1G+LjNC5jTLA@mail.serverhost.com", message.MessageId);
179+
Assert.AreEqual("Boa tarde roger,\r\n\r\nAgradeço a atenção e atendimento. Pode fechar o pedido com 2 cápsulas no\r\nvalor passado de $123.312.313,04.\r\n\r\nMoro em Abracox, eu busco pessoalmente ou recebo no meu endereço? E qual o\r\nprazo de entrega e formas de pagamento?\r\n\r\nObrigado,\r\nJosé roger\r\n\r\n\r\nEm 23 de julho de 2016 09:00, roger Munes <\r\n[email protected]> escreveu:\r\n\r\n> Com 2 cáp deu $123.312.313,04 fico no seu aguardo para finalizar o pedido..\r\n>\r\n>\r\n> Atenciosamente, roger Mussa\r\n> [image: Customer Supplier]*roger de Souza Nunes* /\r\n> Atendimento\r\n> [email protected] <%7bEmail%7d>\r\n>\r\n>\r\n> *Customer supplier*\r\n> 0800 116 7284 - (99) 9376-8104\r\n> http://www.destinataryhost.com\r\n>\r\n>\r\n>\r\n> [image: Twitter] <https://www.twitter.com/customersupplier> [image:\r\n> Facebook] <https://www.facebook.com/custsupplier> [image: Instagram]\r\n> <https://www.instagram.com/custsupplier>\r\n> Antes de imprimir este e-mail veja se é necessário e pense em sua\r\n> responsabilidade com o *Meio Ambiente*.\r\n>\r\n>\r\n>\r\n> *De:* [email protected]\r\n> *Enviada em:* 22/07/2016 19:13:51\r\n> *Para:* roger Munes\r\n> *Assunto:* Re: Re: Contact\r\n> Olá roger, esse valor é com 90 cápsulas, correto? Veja por gentileza com\r\n> 2 aproveito para comprar logo mais.\r\n>\r\n> Obrigado pela atenção.\r\n>\r\n> José roger\r\n>\r\n> Em 22 de julho de 2016 16:05, roger Munes <\r\n> [email protected]> escreveu:\r\n>\r\n> Boa tarde tudo bem ? orçamento 345788 consegui por $ 2.222,00\r\n> fico no seu aguardo.\r\n>\r\n>\r\n> Atenciosamente, roger Mussa\r\n> [image: Customer Supplier]*roger Munes* /\r\n> Atendimento\r\n> [email protected] <%7bEmail%7d>\r\n>\r\n>\r\n> *Customer supplier*\r\n> 0800 116 7284 - (99) 9376-8104\r\n> http://www.destinataryhost.com\r\n>\r\n>\r\n>\r\n> [image: Twitter] <https://www.twitter.com/customersupplier> [image:\r\n> Facebook] <https://www.facebook.com/custsupplier> [image: Instagram]\r\n> <https://www.instagram.com/custsupplier>\r\n> Antes de imprimir este e-mail veja se é necessário e pense em sua\r\n> responsabilidade com o *Meio Ambiente*.\r\n>\r\n>\r\n>\r\n> *De:* [email protected]\r\n> *Enviada em:* 22/07/2016 14:55:08\r\n> *Para:* roger Munes\r\n> *Assunto:* Re: Contact\r\n> Boa tarde roger,\r\n>\r\n> Agradeço o contato. Ainda não comprei porém tenho o orçamento abaixo que\r\n> infelizmente está abaixo da Miligrama. Caso consiga cobrir, prefiro comprar\r\n> com vocês por já ser cliente e ter outras compras com sucesso no histórico.\r\n>\r\n>\r\n> Obrigado,\r\n> José roger\r\n>\r\n>\r\n>\r\n> Em 22 de julho de 2016 14:49, roger Munes <\r\n> [email protected]> escreveu:\r\n>\r\n> Boa tarde amigo, como vai ?\r\n>\r\n> Chegou a finalizar o pedido, comprou em outro lugar ? que achou do meu\r\n> orçamento vamos negociar cubro a oferta de qualquer concorrente.\r\n>\r\n>\r\n> Atenciosamente, roger Mussa\r\n> [image: Customer Supplier]*roger de Souza Nunes* /\r\n> Atendimento\r\n> [email protected] <%7bEmail%7d>\r\n>\r\n>\r\n> *Customer supplier*\r\n> 0800 116 7284 - (99) 9376-8104\r\n> http://www.destinataryhost.com\r\n>\r\n>\r\n>\r\n> [image: Twitter] <https://www.twitter.com/customersupplier> [image:\r\n> Facebook] <https://www.facebook.com/custsupplier> [image: Instagram]\r\n> <https://www.instagram.com/custsupplier>\r\n> Antes de imprimir este e-mail veja se é necessário e pense em sua\r\n> responsabilidade com o *Meio Ambiente*.\r\n>\r\n>\r\n>\r\n>\r\n".Replace("\r\n", ""), message.BodyText.Text.Replace("\r\n", ""));
180+
Assert.AreEqual("<div dir=\"ltr\">Boa tarde roger,<div><br></div><div>Agradeço a atenção e atendimento. Pode fechar o pedido com 2 cápsulas no valor passado de <span style=\"font-size:12.8px\">$ 2.222,00.</span></div><div><br></div><div>Moro em Cubivila, eu busco pessoalmente ou recebo no meu endereço? E qual o prazo de entrega e formas de pagamento?</div><div><br></div><div>Obrigado,</div><div>José roger</div><div><br></div></div><div class=\"gmail_extra\"><br><div class=\"gmail_quote\">Em 23 de julho de 2016 09:00, roger Munes <span dir=\"ltr\">&lt;<a href=\"mailto:[email protected]\" target=\"_blank\">[email protected]</a&gt;</span> escreveu:<br><blockquote class=\"gmail_quote\" style=\"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex\"><div>Com 2 cáp deu $ 2.222,00 fico no seu aguardo para finalizar o pedido.    \r\n<span class=\"\"><div>\r\n<p><br>\r\nAtenciosamente, roger Mussa<br>\r\n <img alt=\"Customer Supplier\" src=\"http://www.customerhost.com/assinatura/logo.png\"><strong>roger de Souza Nunes</strong> / Atendimento<br>\r\n<a href=\"mailto:%7bEmail%7d\" target=\"_blank\">[email protected]</a><br>\r\n<br>\r\n<br>\r\n<strong>Customer supplier</strong> <br>\r\n0800 116 7284 - <img alt=\"\" src=\"http://customerhost.com/assinatura/whatsappm.png\"> (99) 9376-8104<br>\r\n<a href=\"http://www.destinataryhost.com/\" target=\"_blank\">http://www.destinataryhost.com</a>  <br>\r\n<br>\r\n<br>\r\n<br>\r\n<a href=\"https://www.twitter.com/customersupplier\" target=\"_blank\"><img alt=\"Twitter\" src=\"http://www.customerhost.com/assinatura/twitterm.png\"></a>  <a href=\"https://www.facebook.com/custsupplier\" target=\"_blank\"><img alt=\"Facebook\" src=\"http://www.customerhost.com/assinatura/facebookm.png\"></a>  <a href=\"https://www.instagram.com/custsupplier\" target=\"_blank\"><img alt=\"Instagram\" src=\"http://www.customerhost.com/assinatura/instagramm.png\"></a><br>\r\nAntes de imprimir este e-mail veja se é necessário e pense em sua responsabilidade com o <strong>Meio Ambiente</strong>.</p>\r\n\r\n<p><img alt=\"\" src=\"cid:31391411\" style=\"border:0px solid black;min-height:200px;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;width:600px\"></p>\r\n\r\n<p> </p>\r\n</div>\r\n \r\n\r\n</span><div style=\"text-align:left\"><strong>De:</strong> <a href=\"mailto:[email protected]\" target=\"_blank\">[email protected]</a><br>\r\n<strong>Enviada em:</strong> 22/07/2016 19:13:51<span class=\"\"><br>\r\n<strong>Para:</strong> roger Munes<br>\r\n</span><strong>Assunto:</strong> Re: Re: Contact</div><div><div class=\"h5\">\r\n\r\n<div>Olá roger, esse valor é com 90 cápsulas, correto? Veja por gentileza com 2 aproveito para comprar logo mais.\r\n<div> </div>\r\n\r\n<div>Obrigado pela atenção.</div>\r\n\r\n<div> </div>\r\n\r\n<div>José roger</div>\r\n</div>\r\n\r\n<div> \r\n<div>Em 22 de julho de 2016 16:05, roger Munes &lt;<a href=\"mailto:[email protected]\" target=\"_blank\">[email protected]</a>&gt; escreveu:\r\n\r\n<blockquote>\r\n<div>Boa tarde tudo bem ? orçamento 345788 consegui por $ 2.222,00<br>\r\nfico no seu aguardo.\r\n<div>\r\n<p><br>\r\nAtenciosamente, roger Mussa<br>\r\n <img alt=\"Customer Supplier\" src=\"http://www.customerhost.com/assinatura/logo.png\"><strong>roger de Souza Nunes</strong> / Atendimento<br>\r\n<a href=\"mailto:%7bEmail%7d\" target=\"_blank\">[email protected]</a><br>\r\n<br>\r\n<br>\r\n<strong>Customer supplier</strong> <br>\r\n0800 116 7284 - <img alt=\"\" src=\"http://customerhost.com/assinatura/whatsappm.png\"> (99) 9376-8104<br>\r\n<a href=\"http://www.destinataryhost.com/\" target=\"_blank\">http://www.fmiligrama.com.br</a>  <br>\r\n<br>\r\n<br>\r\n<br>\r\n<a href=\"https://www.twitter.com/customersupplier\" target=\"_blank\"><img alt=\"Twitter\" src=\"http://www.customerhost.com/assinatura/twitterm.png\"></a>  <a href=\"https://www.facebook.com/custsupplier\" target=\"_blank\"><img alt=\"Facebook\" src=\"http://www.customerhost.com/assinatura/facebookm.png\"></a>  <a href=\"https://www.instagram.com/custsupplier\" target=\"_blank\"><img alt=\"Instagram\" src=\"http://www.customerhost.com/assinatura/instagramm.png\"></a><br>\r\nAntes de imprimir este e-mail veja se é necessário e pense em sua responsabilidade com o <strong>Meio Ambiente</strong>.</p>\r\n\r\n<p><img alt=\"\" src=\"cid:16636849\" style=\"border:0px solid black;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;min-height:200px;width:600px\"></p>\r\n\r\n<p> </p>\r\n</div>\r\n \r\n\r\n<div style=\"text-align:left\"><strong>De:</strong> <a href=\"mailto:[email protected]\" target=\"_blank\">[email protected]</a><br>\r\n<strong>Enviada em:</strong> 22/07/2016 14:55:08<br>\r\n<strong>Para:</strong> roger Munes<br>\r\n<strong>Assunto:</strong> Re: Contact</div>\r\n\r\n<div>\r\n<div>\r\n<div>Boa tarde roger,\r\n<div> </div>\r\n\r\n<div>Agradeço o contato. Ainda não comprei porém tenho o orçamento abaixo que infelizmente está abaixo da Miligrama. Caso consiga cobrir, prefiro comprar com vocês por já ser cliente e ter outras compras com sucesso no histórico.</div>\r\n\r\n<div> </div>\r\n\r\n<div> </div>\r\n\r\n<div>Obrigado,</div>\r\n\r\n<div>José roger</div>\r\n\r\n<div> </div>\r\n\r\n<div> </div>\r\n\r\n<div> </div>\r\n\r\n<div>\r\n<div>Em 22 de julho de 2016 14:49, roger Munes &lt;<a href=\"mailto:[email protected]\" target=\"_blank\">[email protected]</a>&gt; escreveu:\r\n\r\n<blockquote>\r\n<div>Boa tarde amigo, como vai ?<br>\r\n<br>\r\nChegou a finalizar o pedido, comprou em outro lugar ? que achou do meu orçamento vamos negociar cubro a oferta de qualquer concorrente.\r\n<div>\r\n<p><br>\r\nAtenciosamente, roger Mussa<br>\r\n <img alt=\"Customer Supplier\" src=\"http://www.customerhost.com/assinatura/logo.png\"><strong>roger de Souza Nunes</strong> / Atendimento<br>\r\n<a href=\"mailto:%7bEmail%7d\" target=\"_blank\">[email protected]</a><br>\r\n<br>\r\n<br>\r\n<strong>Customer supplier</strong> <br>\r\n0800 116 7284 - <img alt=\"\" src=\"http://customerhost.com/assinatura/whatsappm.png\"> (99) 9376-8104<br>\r\n<a href=\"http://www.destinataryhost.com/\" target=\"_blank\">http://www.fmiligrama.com.br</a>  <br>\r\n<br>\r\n<br>\r\n<br>\r\n<a href=\"https://www.twitter.com/customersupplier\" target=\"_blank\"><img alt=\"Twitter\" src=\"http://www.customerhost.com/assinatura/twitterm.png\"></a>  <a href=\"https://www.facebook.com/custsupplier\" target=\"_blank\"><img alt=\"Facebook\" src=\"http://www.customerhost.cor/assinatura/facebookm.png\"></a>  <a href=\"https://www.instagram.com/custsupplier\" target=\"_blank\"><img alt=\"Instagram\" src=\"http://www.customerhost.com/assinatura/instagramm.png\"></a><br>\r\nAntes de imprimir este e-mail veja se é necessário e pense em sua responsabilidade com o <strong>Meio Ambiente</strong>.</p>\r\n\r\n<p><img alt=\"\" src=\"cid:16636849\" style=\"border:0px solid black;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;min-height:200px;width:600px\"></p>\r\n\r\n<p> </p>\r\n</div>\r\n</div>\r\n</blockquote>\r\n</div>\r\n</div>\r\n</div>\r\n</div>\r\n</div>\r\n</div>\r\n</blockquote>\r\n</div>\r\n</div>\r\n</div></div></div></blockquote></div><br></div>\r\n".Replace("\r\n", ""), message.BodyHtml.Text.Replace("\r\n", ""));
181+
Assert.AreEqual("Re: Re: Re: Contact", message.Subject);
182+
Assert.AreEqual(1, message.To.Count);
183+
Assert.AreEqual(4, message.EmbeddedObjects.Count);
184+
Assert.AreEqual(0, message.Attachments.Count);
185+
}
172186
}
173187
}

0 commit comments

Comments
 (0)