解析多部分消息,仅正文
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 部分