处理电子邮件标题中的空白行
Handling blank lines in email headers
遇到一些不符合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确实能处理这类邮件。
我试着浏览雷鸟的代码库,不熟悉c++,我只是设法找到https://github.com/mozilla/releases-comm-central/blob/1f2a40ec2adb448043de0ae96d93b44a9bfefcd1/mailnews/mime/src/mimemsg.cpp
谁能告诉我雷鸟代码库中邮件解析发生的部分,或者任何处理此类非投诉邮件的开源库/应用程序。
编辑:空行的Hexdump。它包含一个空格
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;.
参考Ruby库中的Ruby代码不符合RFC, RFC允许将多行合并为单个标题行。规则是,延续页眉行(折叠页眉)应该以空格开始——确切的细节在RFC 5322"折叠空白和注释"一节中。
最有可能的问题是Ruby代码在解析之前读取每一行并修剪空白—因此无法检测到额外的行实际上属于前一个头—然而,额外的行并不向头添加任何内容(因为它只包含一个空格),但它是有效的语法。
编辑:不兼容行为在提交17783f8536fc09b926c7425dbacfc35e0e851ef5中引入。引入的副作用之一是拆分头文件&
页眉CRLF = /rn/
white_space = %Q|x9x20|
WSP = /[#{white_space}]/
header_part, body_part = raw_source.split(/#{CRLF}#{WSP}*#{CRLF}(?!#{WSP})/m, 2)
这个问题是在commit a2a45597bce66ebe788cedaaab848a37bd04b25a中提出的,但共识是不破坏现有的行为。
相关文章:
- 尝试从C++访问 UWP 的电子邮件邮件类会导致"REGDB_E_CLASSNOTREG类未注册"错误
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- Qt:使用'mailto:'打开用户的电子邮件客户端失败
- 电子邮件地址中的c++smtp服务器主机名
- 如何使用 c++ (curl) 发送电子邮件
- 在端口 587 (TLS) 上使用 CDO 发送电子邮件时出错
- 预览由Microsoft Outlook 对象库生成的电子邮件
- 如果不有效,如何重复用户输入电子邮件
- 使用REGEX进行电子邮件输入验证C
- 如何从 pjsip 发送电子邮件.是否有任何可用于发送电子邮件的默认方法
- 如何在使用 c++/COM 发送时在电子邮件中插入/嵌入图像文件(.png)
- 使用Regex验证电子邮件和电话字段QT
- 带有 TLS v. 1.2 和 SSL v.3 电子邮件客户端的 Boost.Asio 上下文:ssl3 警报意外消息
- 如何发送带有嵌入图片的电子邮件
- 如何提示用户在C++中输入正确的电子邮件地址格式
- 我在尝试使用 libquickmail 发送电子邮件时收到错误
- C 从电子邮件向量中删除
- 使用VC 应用中的VSTO ADDIN触发Outlook电子邮件附件的删除
- C 和卷曲,发送电子邮件时编码奇怪的字符
- c++中的电子邮件解析器