0

我使用 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 解决方案)。

谢谢!

这是一个有问题的示例文件。

4

1 回答 1

1

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

然后,一旦你得到了,在前面加上:

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

然后尝试再次解析它。

顺便说一句,如果您要解析大量消息,我建议您查看MimeKit,因为它比 OpenPOP 的解析器快 25 倍,并且更符合 RFC。

希望有帮助。

于 2014-03-17T21:08:28.007 回答