解析多部分消息,仅限正文

时间:2014-03-16 11:32:42

标签: c# email mime multipart mime-message

我使用OpenPop.NET来解析存储在数据库中的电子邮件(MIME)消息。

大多数消息都被很好地解析了,但是在其中一些消息体中没有得到解析。

我将主体作为多部分格式的文本,如下所示:

This is a multi-part message in MIME format.

------=_NextPart_000_0027_01C98F52.9826A710
Content-Type: text/plain;
    charset="windows-1255"
Content-Transfer-Encoding: base64

8eHh5CwNCg0K4PDpIPHl7uv6IPLs6eog+fr08unsIOD6IPfx7unqLi4uLi4uLi4uDQoNCiANCg0K
8OX46fog4e8g5Pjl+Q0KDQrg6e709+gg7vL46+X6IPrl6/DkDQoNCiANCg0KICBfX19fXyAgDQoN
CkZyb206IFlvc2kgTGV2eSBbbWFpbHRvOnlfbGV2eUByYW1iYW0uaGVhbHRoLmdvdi5pbF0gDQpT
...
...

我注意到在这些邮件中,标题没有将邮件定义为“Content-Type:multipart / mixed;”。例如,当我保存整个邮件并尝试在Thunderbird中打开它时,邮件正文是多部分邮件,未解析。

我希望单独解析多部分邮件正文,而不是电子邮件的一部分。我怎样才能做到这一点?我使用.NET 3.5(尽管我也将采用.NET 4解决方案)。

谢谢!

This is a problematic sample file.

1 个答案:

答案 0 :(得分:1)

没有任何MIME解析器能够开箱即用地处理这种特殊类型的破坏。您可以做的是搜索以" - "开头的行,然后读取该行的其余部分(修剪前2个破折号)以用作边界字符串

然后,一旦你得到了这个,请提前:

string.Format ("Content-Type: multipart/mixed; boundary=\"{0}\"\r\n", boundary);

然后尝试再次解析它。

顺便说一句,如果你要分析很多消息,我建议你查看MimeKit,因为它比OpenPOP的解析器快25倍,而且还有更多的RFC兼容。

希望有所帮助。