解析多部分消息,仅正文

Posted

技术标签:

【中文标题】解析多部分消息,仅正文【英文标题】:Parsing multi-part message, body only 【发布时间】:2014-04-21 14:10:56 【问题描述】:

我使用 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】:

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

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

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

然后尝试再次解析它。

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

希望对您有所帮助。

【讨论】:

以上是关于解析多部分消息,仅正文的主要内容,如果未能解决你的问题,请参考以下文章

仅发送纯文本电子邮件,正文中包含 Rails mime 部分

ofFice 对话日志仅保留群聊节的正文

从响应消息 C# .NET 4.8 解析多部分文件

在 MIME 多部分消息中显式指定边界?

如何编写多部分 MIME 混合消息以在 Outlook 中正确显示

只获取 MIME 电子邮件的“文本/纯文本”部分