【发布时间】:2013-11-30 23:37:18
【问题描述】:
我一直在对标准化电子邮件格式进行一些研究/测试。最终,我希望为应用程序开发电子邮件解析器。我注意到电子邮件格式存在一些差异,主要存在于电子邮件客户端(gmail、mac mail 等)和电子邮件营销服务(Constant Contact、Mail Chimp 等)之间。
我对格式 (RFC2822) 的理解是 \n\n 将标题与正文分开。这些似乎与从电子邮件营销服务收到的电子邮件一致。然而,电子邮件客户端似乎有一组额外的邮件标题或说明。请参阅下面的电子邮件字符串示例。请注意,我通过电子邮件管道提取了这些字符串。另请注意,这些只是标题/正文拆分的 sn-ps。
电子邮件营销服务:
Content-Type: text/html;
charset="utf-8"
Content-Transfer-Encoding: 8bit
<html>
<head>
<title>Welcome to Banana Republic. Enjoy 25% off! </title>
<STYLE type="text/css">
.ReadMsgBody
{ width: 100%;}
.ExternalClass
{width: 100%;}
在这里,您将看到将标题与正文分开的换行符。根据格式,一切都很好。现在看看电子邮件客户端。
电子邮件客户端:
Mime-Version: 1.0 (Mac OS X Mail 7.0 (1816))
X-Mailer: Apple Mail (2.1816)
--Apple-Mail=_28DD752B-7960-488D-994F-DA9408FCA880
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=windows-1252
Testing Mac Mail. This is the body.
您会看到,在这种情况下,有一组额外的“标题”似乎是关于在这种情况下 Mac Mail 如何格式化电子邮件的说明。
我想我的问题是,这是一种有效的格式吗?有什么规范吗?是否有任何众所周知/记录在案的方法来检查和解析这种类型的格式而不知道正在接收哪种类型的格式?
【问题讨论】:
-
您需要查看多个其他 RFC,例如 RFC2045-2047(MIME 编码)以及它们如何描述多部分消息。我假设您的第二个片段不包括 Content-Type: multipart/mixed; boundary=Apple-Mail=_28DD752B-7960-48 8D-994F-DA9408FCA880 我希望将其视为其中的一部分(您可以有多个子部分,每个子部分都符合 RFC2822 规则)。正确和完整的电子邮件解析是困难的。允许的东西遍布各处。
-
注意这个链接,它引用了许多与电子邮件相关的 RFC:lsoft.com/manuals/Maestro/2.1/Users/WebHelp/…
-
@Joe - Content-Type: multipart/alternative 实际上。不确定这是否会有所不同,但我正在查看您提供的 RFC 参考资料,看看是否可以了解更多信息。
-
作为几个强大的电子邮件解析器(GMime、MimeKit、Camel 等)的作者 - 请不要实现自己的解析器/生成器,除非您致力于正确实现所有内容而不是另一个- 快速而肮脏的解析器,最终只会使人们编写真正的解析器的工作变得更加困难,因为很多人编写的解析器/生成器都弄错了。
标签: email format standards rfc2822