简体   繁体   English

在StreamReader中搜索base64编码的内容?

[英]Search for base64 encoded content in StreamReader?

I need to parse a NDR file from an SMTP badmail folder from IIS. 我需要从IIS的SMTP死信文件夹中解析NDR文件。 Attached to the NDR is the content which is base64 encoded. 附加到NDR的是base64编码的内容。 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. 我希望使用StreamReader将其全部写成一行,但是当对.ReadLine进行穿孔时,它们是单独的行。

Here is a sample of an NDR: 这是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--

This regular expression matches your base64 string and decode it: 此正则表达式匹配您的base64字符串并对其进行解码:

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. 如果您不想使用正则表达式,则可以尝试跳过每一行,直到找到该X-OriginalArrivalTime标头为止。 From there, you can keep every line until you find an empty line, or stream end. 从那里,您可以保留每一行,直到找到空行或流结束为止。

尝试改用Read()方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM