详解MIME:超越纯文本的互联网邮件扩展技术

本文深入介绍了MIME协议的起源、工作原理和技术优势。它作为SMTP协议的扩展,解决了纯文本传输限制,支持发送音频、视频、图像和应用程序等多种文件类型,并定义了包含MIME-Version、Content-Type在内的关键头部字段,是现代电子邮件通信的基石技术。

什么是MIME(多用途互联网邮件扩展)?

MIME(多用途互联网邮件扩展)是原始简单邮件传输协议(SMTP)的扩展。它允许用户通过电子邮件交换不同类型的数据文件,包括音频、视频、图像和应用程序。

与SMTP不同,MIME支持通过电子邮件发送ASCII文本和非ASCII数据。对于ASCII以外的字符集文本,MIME协议是必需的。

SMTP的局限性

SMTP于1981年出现,是一种通过电子邮件传递消息的标准协议。然而,原始的SMTP协议仅支持未经身份验证和加密的7位ASCII文本通信。ASCII只有94个可打印字符,该系统无法处理二进制文件或使用不同书写系统、带重音字母等的非英语语言字符。 纯SMTP也不支持发送视频或音频数据。 每个SMTP服务器的默认设计是一个开放邮件中继,允许任何人通过它发送电子邮件,而不仅仅是来自或发送给已知用户的邮件。这些限制使得SMTP通信容易受到电子邮件欺骗、垃圾邮件、蠕虫和中间人(MitM)攻击。 MIME被提议作为解决这些限制的方案。

MIME的起源

1991年,当时还是贝尔通信公司技术人员的纳撒尼尔·博伦斯坦向互联网工程任务组(IETF)提议扩展SMTP,以便网络(和其他互联网)客户端和服务器能够识别和处理各种类型的数据,而不仅仅是基于拉丁语的ASCII文本,并允许对二进制文件进行编码以通过SMTP传输。 因此,新的文件类型被添加到“邮件”中,作为一种受支持的互联网协议文件类型。尽管MIME最初只是为了解决电子邮件和SMTP的缺点而设计,但它并不局限于文本数据,对其他通信协议也很重要。 新的MIME数据类型在互联网号码分配机构(IANA)注册。IETF的RFC 6838定义了用于MIME的媒体类型的通知和注册程序。

MIME的优势

MIME比SMTP有几个优点。

  • 用户可以通过电子邮件发送不同种类的二进制附件。
  • 同一封电子邮件中可以包含不同类型多个附件。
  • 对消息长度没有限制。
  • 支持多部分消息。

MIME为多部分消息定义了四种子类型,指定了这些部分的性质及其相互关系。特别是,“multipart/alternative”子类型允许系统选择消息的最佳表示形式:纯文本或HTML。

MIME的工作原理

具有MIME格式的电子邮件可以通过标准协议(如SMTP、邮局协议(POP)或互联网消息访问协议(IMAP))传输。此类消息的正文可能由多个部分组成。头部可以用MIME支持的非ASCII字符集指定。IETF的RFC 2045定义了用于描述MIME消息结构的各种头部。 服务器在电子邮件传输开始时插入MIME头部。客户端使用MIME头部为头部指示的数据类型选择合适的播放器应用程序。一些播放器内置于网络客户端或浏览器中。例如,所有浏览器都带有GIF和JPEG图像播放器,并且可以处理HTML文件。其他播放器可能需要下载。 在发送端,MIME将非ASCII数据转换为7位网络虚拟终端(NVT)数据。7位ASCII可以表示128个字符。然后,MIME将转换后的数据传递给客户端SMTP。在接收端,消息被转换回原始数据,允许收件人查看其内容,无论它包含文本、音频、视频还是其他类型的数据。

MIME头部字段

MIME头部包含多个子部分。包括:

MIME-Version 此头部字段指示消息采用MIME格式。其值通常为“1.0”。

Content-Type 此头部描述消息内容的媒体类型。它由一个类型和一个子类型组成,两者都是字符串。当它们之间用斜杠(/)连接时,类型和子类型构成一个MIME类型。

  • 类型:数据类型的一般类别(例如,视频或文本)
  • 子类型:MIME类型表示的具体数据类型。

MIME类型不区分大小写。可以向MIME类型添加可选参数以提供附加细节。因此,如果参数是“charset”,它将指定用于数据字符的字符集。如果未指定此参数,MIME将使用默认的ASCII字符集。 使用“multipart”类型,MIME允许邮件消息具有以树形结构排列的部分,以支持:

  • 简单文本消息
  • 文本加附件
  • 附带原始消息的回复
  • HTML中的多种替代方案
  • 图像、音频和视频
  • 应用程序

Content-Disposition 此头部指定电子邮件消息的呈现样式。处置方式可能是:

  • 内联:显示消息时自动显示
  • 附件:不会自动显示,而是需要一些用户操作(即下载)

RFC 2183规定了内容处置头部。

Content-Transfer-Encoding 此头部指示除了内容类型头部中指定的原始编码之外,是否还使用了二进制到文本的编码方案。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计