Skip to content

Commit 86f63a9

Browse files
Adjusted wrong embedded image to be ignored when fail to parse.
When code has a bad encoded content and the decode fail, system will recover the content text and skip attempt to decode. Adjusted Tests.
1 parent 08e7e9a commit 86f63a9

2 files changed

Lines changed: 33 additions & 15 deletions

File tree

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

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -305,15 +305,27 @@ private static void DecodePartBody(ref MimePart part)
305305
if (charset.ToLower() == "iso-8859-1")
306306
charset = "windows-1252";
307307
#endif
308-
if (part.ContentTransferEncoding.Equals(ContentTransferEncoding.Base64))
309-
DecodeBase64Part(part, charset);
310-
else if (part.ContentTransferEncoding.Equals(ContentTransferEncoding.QuotedPrintable))
308+
309+
try
311310
{
312-
part.TextContent = Codec.FromQuotedPrintable(ToASCII(part.BinaryContent), charset);
313-
part.BinaryContent = Codec.GetEncoding(charset).GetBytes(part.TextContent);
311+
if (part.ContentTransferEncoding.Equals(ContentTransferEncoding.Base64))
312+
{
313+
DecodeBase64Part(part, charset);
314+
}
315+
else if (part.ContentTransferEncoding.Equals(ContentTransferEncoding.QuotedPrintable))
316+
{
317+
part.TextContent = Codec.FromQuotedPrintable(ToASCII(part.BinaryContent), charset);
318+
part.BinaryContent = Codec.GetEncoding(charset).GetBytes(part.TextContent);
319+
}
320+
else
321+
{
322+
part.TextContent = Codec.GetEncoding(charset).GetString(part.BinaryContent);
323+
}
314324
}
315-
else
325+
catch (Exception)
326+
{
316327
part.TextContent = Codec.GetEncoding(charset).GetString(part.BinaryContent);
328+
}
317329
}
318330

319331
private static void DecodeBase64Part(MimePart part, string charset)
@@ -528,11 +540,7 @@ public static MimePart ParseMimePart(byte[] binaryData, Message message)
528540
{
529541
// TODO: Create an interpreter to this.
530542
}
531-
// This is a image block.
532-
else if (part.ContentType.Type.ToLower().Equals("image"))
533-
{
534-
DispatchPart(part, ref message);
535-
}
543+
// Other types.
536544
else
537545
{
538546
DecodePartBody(ref part);

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,19 +169,29 @@ public void MustParseInvalidConfirmReadReturnReceipt()
169169
Assert.IsNull(message.ReturnReceipt);
170170
Assert.AreEqual(0, message.Recipients.Count);
171171
}
172-
173-
172+
174173
[Test(Description = "")]
175-
public void MustParseImageAsPartOfEmailBody()
174+
public void MustParseEmlWithWrongImageAsPartOfEmailBody()
176175
{
177176
var message = Parser.ParseMessageFromFile("resource\\image-as-body-part.eml");
178177
Assert.AreEqual("CAM3z=h1WB0qSZPU+PWL5VqxsL1k1gmh0pmJivD1G+LjNC5jTLA@mail.serverhost.com", message.MessageId);
179178
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", ""));
180179
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", ""));
181180
Assert.AreEqual("Re: Re: Re: Contact", message.Subject);
182181
Assert.AreEqual(1, message.To.Count);
183-
Assert.AreEqual(4, message.EmbeddedObjects.Count);
182+
Assert.AreEqual(2, message.EmbeddedObjects.Count);
184183
Assert.AreEqual(0, message.Attachments.Count);
184+
185+
// Manual validation: Save the attachment to validate if has valid image.
186+
//var i = 0;
187+
//foreach (MimePart item in message.EmbeddedObjects)
188+
//{
189+
// var fileName = item.ContentName ?? "file" + i + ".jpg";
190+
// var fileNameDecoded = item.ContentName ?? "file_decoded_" + i + ".jpg";
191+
// i++;
192+
// File.WriteAllBytes(fileName, item.BinaryContent);
193+
// File.WriteAllBytes(fileNameDecoded, Convert.FromBase64String(item.TextContentTransferEncoded));
194+
//}
185195
}
186196
}
187197
}

0 commit comments

Comments
 (0)