首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自邮件客户端的电子邮件格式

来自邮件客户端的电子邮件格式
EN

Stack Overflow用户
提问于 2013-11-18 06:55:22
回答 1查看 529关注 0票数 0

我一直在做一些标准化电子邮件格式的研究/测试。最终,我希望开发一个应用程序的电子邮件解析器。我注意到电子邮件格式的一些差异,主要是在电子邮件客户端(gmail,mac邮件等)和电子邮件营销服务(Constant Contact,Mail Chimp等)之间。

我对格式(RFC2822)的理解是,\n\n将头部与正文分开。这些似乎与从电子邮件营销服务收到的电子邮件一致。然而,电子邮件客户端似乎有一组额外的邮件头或邮件说明。请参阅下面的电子邮件字符串示例。请注意,我是通过电子邮件管道拉出这些字符串的。还要注意,这些只是标题/正文拆分的片段。

电子邮件营销服务:

代码语言:javascript
复制
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%;}

在这里,您将看到将标题与正文分隔开的换行符。根据格式,一切都很好。现在看一下电子邮件客户端。

电子邮件客户端:

代码语言:javascript
复制
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如何格式化电子邮件的说明。

我想我的问题是,这是一种有效的格式吗?上面有什么说明吗?是否有任何众所周知的/有文档记录的方法来检查和解析这种类型的格式,而不需要知道接收的是哪种类型的格式?

EN

回答 1

Stack Overflow用户

发布于 2013-12-31 11:03:01

扩展注释中的观点

这是一个有效的格式吗?

是。邮件消息的整体框架比严格的7位ASCII文本更复杂,称为MIME。它包括第一个示例中的"Content-Type“头的规范,该头通知客户端整个消息是HTML而不是纯文本。如今,许多(可能是大多数)消息在最外层的类型为"multipart/alternative“,封装了2个(或更多!)消息正文的版本,最常见的是文本/纯文本表示和文本/html版本,其本身通常位于包含嵌入图像的多部分/混合容器中。

上面有什么规范吗?

是。在RFC的2045-2049中描述了MIME的基础知识,并且在后来的RFC和类型注册文档中描述了许多扩展和更正。MIME还提供了HTTP文档规范的核心组件,因此许多扩展几乎与电子邮件无关。

是否有任何众所周知的/有文档记录的方法来检查和解析这种类型的格式,而不需要知道接收的是哪种类型的格式?

是。虽然几乎所有的现代电子邮件都是MIME格式,但从形式上讲,你可以通过查找"MIME-Version“头来检测它。有关详细信息,请参阅RFC2045。请注意,您的第一个示例没有显示该标题,但它必须存在于完整的原始文件中,否则您显示的标题将毫无意义。

这说明了为什么您可能应该重新考虑编写自己的邮件解析器的想法。你看到的两种格式实际上并不是这样,它们只是MIME格式框架的不同应用程序。MIME比RFC2822 (顺便说一句,它本身也被RFC5322淘汰了)要老得多,并且有许多成熟和健壮的解析器可用。编写一个适用于大多数邮件的MIME解析器很容易,但编写一个适用于几乎所有有效邮件的MIME解析器就有点困难了,而编写一个能够安全地处理真实邮件世界的解析器则是一种挑战,因为现实世界中的邮件通常并不完全正确,在某些情况下,它被设计成以恶意的方式破坏幼稚的解析器。充分利用在您之前几十年的程序员的经验:使用现有的解析器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20037300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档