【发布时间】:2014-08-18 10:55:06
【问题描述】:
遇到一些不符合 RFC 的邮件
authentication-results: spf=none (sender IP is ) smtp.mailfrom=**@********.**;
Content-Type: multipart/related;
boundary="_004_2039b206f2a54788ba6a101978bd3f82DBXPR07MB013eurprd07pro_";
type="multipart/alternative"
MIME-Version: 1.0
例如,上面的邮件在标题中有一个空行(在 Content-Type 之前)。严格遵守 RFC(例如 https://github.com/mikel/mail)的库将无法解析它们。 Apple Mail、Thunderbird 确实能够处理此类邮件。
曾尝试浏览 Thunderbird 的代码库,对 C++ 不熟悉,才找到https://github.com/mozilla/releases-comm-central/blob/1f2a40ec2adb448043de0ae96d93b44a9bfefcd1/mailnews/mime/src/mimemsg.cpp
谁能指出 Thunderbird 代码库中邮件解析发生的部分,或者任何处理此类非投诉邮件的开源库/应用程序。
编辑:
空行的十六进制转储。它包含一个空格。
00013e0: 2a2a 2a2a 2a2a 2e2a 2a3b 0d0a 200d 0a43 ******.**;.. ..C
00013f0: 6f6e 7465 6e74 2d54 7970 653a 206d 756c ontent-Type: mul
0001400: 7469 7061 7274 2f72 656c 6174 6564 3b0d tipart/related;.
【问题讨论】:
-
我怀疑
blank行并不是真正的空白,而是有一个空格——这会使你的问题成为 ruby 实现中的错误,而不是其他实现中的一个特性—— - 你能添加一个八进制/十六进制转储“问题行* -
@Soren 附加了 hexdump,行中有一个空格
-
所以 blank 行实际上是前一个标题的延续行——
mail中的 ruby 代码可能是trims解析它们之前的行——导致使延续语法失败的代码。 -
@Soren 是的,它是一个空的折叠页眉。 github.com/mikel/mail/commit/… 中引入了不合规行为。该问题已在 github.com/mikel/mail/commit/… 中提出。
标签: c++ email mime thunderbird