复合 MIME 允许同一封邮件中同时发送 Text 格式和 Html 格式。在客户端收到这封邮件的时候,可以自主选择将要渲染的版本。这也是为什么有些客户端上会提示用户选择渲染 Html 还是纯文本。
至于为什么两种格式共存,更多的还是历史遗留问题了,为了兼容老式邮箱客户端,又想提升用户体验,只有共存才能不影响老用户使用的同时给那些高级用户一个选择更好体验的机会。
关于 MIME,做 Web 开发的对这个肯定不陌生,但对来源可能就没那么清楚了,实际它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理,后来才扩展到 Web。
MIME: Multipurpose Internet Mail Extensions 即 多用途互联网邮件扩展类型
一个常见的 Email 报文看起来可能是这样的:
Return-Path: <xxx@xx.com>
X-Original-To: yyy@yy.com
Delivered-To: yyy@yy.com
From: "=?utf-8?B?6YCE5q2j5q2j?=" <xxx@xx.com>
To: "=?utf-8?B?aQ==?=" <yyy@yy.com>
Subject: xyz
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_5AA729EB_0B139BB8_1DAA07A4"
Content-Transfer-Encoding: 8Bit
Date: Tue, 13 Mar 2018 09:31:23 +0800
This is a multi-part message in MIME format.
------=_NextPart_5AA729EB_0B139BB8_1DAA07A4
Content-Type: text/plain;
charset="utf-8"
Content-Transfer-Encoding: base64
Y3Y=
------=_NextPart_5AA729EB_0B139BB8_1DAA07A4
Content-Type: text/html;
charset="utf-8"
Content-Transfer-Encoding: base64
PGRpdj5jdjwvZGl2PjxkaXY+PGluY2x1ZGV0YWlsPjwhLS08IVtlbmRpZl0tLT48L2luY2x1
ZGV0YWlsPjwvZGl2Pg==
------=_NextPart_5AA729EB_0B139BB8_1DAA07A4--
可以发现邮件体一共包含了两块,首先 base64 不是必须的,有些服务器可能直接就原文传了,在这里的两块解析出来就会发现内容都是一样的,开发时选择性渲染一种格式就可以了。