0

I need to parse a NDR file from an SMTP badmail folder from IIS. Attached to the NDR is the content which is base64 encoded. That is what I need to get to. I was hoping that, using a StreamReader, it would be all one line, but they are separate lines when a perforam a .ReadLine.

Here is a sample of an NDR:

 From: postmaster To: hidden Date: Thu, 12 Nov 2009 11:56:14 -0500 MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="9B095B5ADSN=_01CA638BF4740C5500000045spinstitch.com" X-DSNContext: 7ce717b1 - 1378 - 00000002 - C00402EF Message-ID: Subject: Delivery Status Notification (Failure) This is a MIME-formatted message. Portions of this message may be unreadable without a MIME-capable mail program. --9B095B5ADSN=_01CA638BF4740C5500000045spinstitch.com Content-Type: text/plain; charset=unicode-1-1-utf-7 This is an automatically generated Delivery Status Notification. Delivery to the following recipients failed. hidden --9B095B5ADSN=_01CA638BF4740C5500000045spinstitch.com Content-Type: message/delivery-status Reporting-MTA: dns;spinstitch.com Received-From-MTA: dns;spinstitch Arrival-Date: Thu, 12 Nov 2009 11:56:11 -0500 Final-Recipient: rfc822;hidden Action: failed Status: 5.4.0 --9B095B5ADSN=_01CA638BF4740C5500000045spinstitch.com Content-Type: message/rfc822 Received: from mail pickup service by spinstitch.com with Microsoft SMTPSVC; Thu, 12 Nov 2009 11:56:11 -0500 MIME-Version: 1.0 From: hidden To: hidden Date: 12 Nov 2009 11:56:11 -0500 Subject: For Sale: 463 Saltaire Dr. Calabash, NC US 28467 $6,800,000 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 Message-ID: X-OriginalArrivalTime: 12 Nov 2009 16:56:11.0813 (UTC) FILETIME=[09CED550:01CA63B9] DQo8Y2VudGVyPg0KPGltZyBpZD0idHJJTUciIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHNyYz0i aHR0cDovL3NlcnZpY2VzLnNwaW5zdGl0Y2guY29tL3RyaW1nLmFzcHg/Z2V0SW1nPUswaXg0 cDJkZ1c4b3ozRmZBNE5GcmJxVmFoUTZpOWd2Z2ZlZmVWcjhSZkVhamdnamFYUnROMWU2RW15 OG5ic0dUbWMxOEo0UnlhMS81WVFvaFhraFA2VTNFcTRFRHB4R1J4YmpjeXlhOG56aExKT2hD M0QzL3RWNVh6ZmxWNkphIj4NCjxkaXYgc3R5bGU9IndpZHRoOjEwMCU7IGJhY2tncm91bmQ6 IHVybChodHRwOi8vd3d3LnNwaW5zdGl0Y2h0b3Vycy5jb21GaWxlcy9WaWV3ZXJTa2lucy9C YWNrZ3JvdW5kcy9EZWZhdWx0L2JhY2suanBnKTsgYmFja2dyb3VuZC1hdHRhY2htZW50OmZp eGVkOw0KCWJhY2tncm91bmQtcmVwZWF0OnJlcGVhdC15Ow0KCWJhY2tncm91bmQtcG9zaXRp b246dG9wIGNlbnRlcjsNCgliYWNrZ3JvdW5kLWNvbG9yOiM3YTZmNTM7Ij4NCjx0YWJsZSB3 aWR0aD0iNjEyIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+ DQogIDx0cj4NCiAgICA8dGQgd2lkdGg9IjUyOSIgYWxpZ249ImxlZnQiPjx0YWJsZSB3aWR0 aD0iMjAwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQog ICAgICA8dHI+DQogICAgICAgIDx0ZCB3aWR0aD0iOTEiIGFsaWduPSJjZW50ZXIiPjxhIGlk PSJwcmludGZseWVyIiBocmVmPSJodHRwOi8vc2VydmljZXMuc3BpbnN0aXRjaC5jb20vTWFp bERpcmVjdC5hc3B4P21haWxlcj1LMGl4NHAyZGdXOG96M0ZmQTRORnJicVZhaFE2aTlndmdm ZWZlVnI4UmZFYWpnZ2phWFJ0TjFlNkVteThuYnNHVG1jMThKNFJ5YTElMmY1WVFvaFhraFA2 VTNFcTRFRHB4R1J4YmpjeXlhOG56aExKT2hDM0QzJTJmdFY1WHpmbFY2SmElN2NsaW5rUHJp bnQiIHRpdGxlPSJQcmludCBGbHllciI+PGltZyBzcmM9Imh0dHA6Ly93d3cuc3BpbnN0aXRj aHRvdXJzLmNvbS9pbWFnZXMvTWFpbGluZ3MvRmx5ZXIvdGFiUHJpbnQucG5nIiB3aWR0aD0i OTEiIGhlaWdodD0iMjgiIGJvcmRlcj0iMCI+PC9hPjwvdGQ+DQogICAgICAgIDx0ZCB3aWR0 aD0iOTEiIGFsaWduPSJjZW50ZXIiPjxhIGlkPSJzYXZlY29weSIgaHJlZj0iaHR0cDovL3Nl cnZpY2VzLnNwaW5zdGl0Y2guY29tL01haWxEaXJlY3QuYXNweD9tYWlsZXI9SzBpeDRwMmRn VzhvejNGZkE0TkZyYnFWYWhRNmk5Z3ZnZmVmZVZyOFJmRWFqZ2dqYVhSdE4xZTZFbXk4bmJz R1RtYzE4SjRSeWExJTJmNVlRb2hYa2hQNlUzRXE0RURweEdSeGJqY3l5YThuemhMSk9oQzNE MyUyZnRWNVh6ZmxWNkphJTdjbGlua1NhdmUiIHRpdGxlPSJTYXZlIEZseWVyIj48aW1nIHNy Yz0iaHR0cDovL3d3dy5zcGluc3RpdGNodG91cnMuY29tL2ltYWdlcy9NYWlsaW5ncy9GbHll ci90YWJTYXZlLnBuZyIgd2lkdGg9IjkxIiBoZWlnaHQ9IjI4IiBib3JkZXI9IjAiPjwvYT48 L3RkPg0KICAgICAgICA8dGQgd2lkdGg9IjkxIiBhbGlnbj0iY2VudGVyIj48YSBpZD0ibWFw IiBocmVmPSJodHRwOi8vc2VydmljZXMuc3BpbnN0aXRjaC5jb20vTWFpbERpcmVjdC5hc3B4 P21haWxlcj1LMGl4NHAyZGdXOG96M0ZmQTRORnJicVZhaFE2aTlndmdmZWZlVnI4UmZFYWpn Z2phWFJ0TjFlNkVteThuYnNHVG1jMThKNFJ5YTElMmY1WVFvaFhraFA2VTNFcTRFRHB4R1J4 YmpjeXlhOG56aExKT2hDM0QzJTJmdFY1WHpmbFY2SmElN2NsaW5rTWFwIiB0aXRsZT0iTWFw IFByb3BlcnR5Ij48aW1nIHNyYz0iaHR0cDovL3d3dy5zcGluc3RpdGNodG91cnMuY29tL2lt YWdlcy9NYWlsaW5ncy9GbHllci90YWJNYXAucG5nIiB3aWR0aD0iOTEiIGhlaWdodD0iMjgi IGJvcmRlcj0iMCI+PC9hPjwvdGQ+DQogICAgICAgIDx0ZCB3aWR0aD0iOTEiIGFsaWduPSJj ZW50ZXIiPjxhIGlkPSJ2aXJ0dWFsdG91ciIgaHJlZj0iaHR0cDovL3NlcnZpY2VzLnNwaW5z dGl0Y2guY29tL01haWxEaXJlY3QuYXNweD9tYWlsZXI9SzBpeDRwMmRnVzhvejNGZkE0TkZy YnFWYWhRNmk5Z3ZnZmVmZVZyOFJmRWFqZ2dqYVhSdE4xZTZFbXk4bmJzR1RtYzE4SjRSeWEx JTJmNVlRb2hYa2hQNlUzRXE0RURweEdSeGJqY3l5YThuemhMSk9oQzNEMyUyZnRWNVh6ZmxW NkphJTdjbGlua1ZyVG91ciIgdGl0bGU9IlZpcnR1YWwgVG91ciI+PGltZyBzcmM9Imh0dHA6 Ly93d3cuc3BpbnN0aXRjaHRvdXJzLmNvbS9pbWFnZXMvTWFpbGluZ3MvRmx5ZXIvdGFiVnJU b3VyLnBuZyIgd2lkdGg9IjkxIiBoZWlnaHQ9IjI4IiBib3JkZXI9IjAiPjwvYT48L3RkPg0K ICAgICAgPC90cj4NCiAgICA8L3RhYmxlPjwvdGQ+DQogIDwvdHI+DQogIDx0ciBzdHlsZT0i Ym9yZGVyOiAxcHggc29saWQ7Ij4NCiAgICA8dGQ+PGltZyBpZD0iZmx5ZXJCZyIgc3JjPSJo dHRwOi8vd3d3LnNwaW5zdGl0Y2h0b3Vycy5jb20vdG91cnMvdG91cjEyNi9mbHllcnMvZG5w VmJOWjMyRHdheGpLODZtMWNMeXhGRzFqd0tORmlBSGdiRWxBeHBTNnlFUHF0WC5qcGciIG5h bWU9ImZseWVyQmciIHdpZHRoPSI2MTIiIGhlaWdodD0iNzkyIiBzdHlsZT0iYm9yZGVyOiAx cHggc29saWQ7Ij48L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCjxicj4NCjxhIGlkPSJ1bnN1 YiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBm b250LXNpemU6IDEwcHg7IiBocmVmPSJodHRwOi8vc2VydmljZXMuc3BpbnN0aXRjaC5jb20v TWFpbERpcmVjdC5hc3B4P21haWxlcj1LMGl4NHAyZGdXOG96M0ZmQTRORnJicVZhaFE2aTln dmdmZWZlVnI4UmZFYWpnZ2phWFJ0TjFlNkVteThuYnNHVG1jMThKNFJ5YTElMmY1WVFvaFhr aFA2VTNFcTRFRHB4R1J4YmpjeXlhOG56aExKT2hDM0QzJTJmdFY1WHpmbFY2SmElN2N1bnN1 YiI+VW5zdWJzY3JpYmUgZnJvbSB0aGlzIG1haWxpbmc8L2E+PGJyPg0KPHNwYW4gc3R5bGU9 ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6 IDEwcHg7Ij5Db3B5cmlnaHQgw4LCqSAyMDA5IFNwaW5TdGl0Y2ggTExDIDExMTAgQmFzaWxk b24gUmQuIE10LiBQbGVhc2FudCwgU0MgIDI5NDY2PC9zcGFuPg0KPC9kaXY+DQo8L2NlbnRl cj4NCg== --9B095B5ADSN=_01CA638BF4740C5500000045spinstitch.com-- 

2 Answers 2

1

This regular expression matches your base64 string and decode it:

Match m = Regex.Match( File.ReadAllText(@"c:\edit1.txt"), @"X-OriginalArrivalTime:.*?\r\n\r\n([\s\S]*)\r\n\r\n"); byte[] data = Convert.FromBase64String(m.Groups[1].Value); 

If you prefer do not to use regular expressions, you could try to skip every line until you find that X-OriginalArrivalTime header. From there, you can keep every line until you find an empty line, or stream end.

Sign up to request clarification or add additional context in comments.

2 Comments

RegEx is fine with me. would this expresion reject the last line too: --9B095B5ADSN=_01CA638BF4740C5500000045spinstitch.com--
Come to think of it, the last line might be rejected becuase of the whitespace when it is decoded.....
0

Try using the Read() method instead.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.