MIME协议详解:电子邮件传输的技术革新

MIME是原始SMTP电子邮件协议的扩展,支持通过电子邮件交换不同类型的数据文件,包括音频、视频、图像和应用程序,解决了SMTP仅支持ASCII文本的限制。

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

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

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

SMTP的缺点

SMTP于1981年出现,是通过电子邮件传递消息的标准协议。然而,原始SMTP协议仅支持7位ASCII文本通信,既不认证也不加密。ASCII只有94个可打印字符,该系统无法处理二进制文件或使用不同书写系统、带重音字母等的非英语语言字符。

纯SMTP也不支持发送视频或音频数据。每个SMTP服务器的默认设计是开放邮件中继,允许任何人通过它发送电子邮件,而不仅仅是从已知用户发送或发送给已知用户的邮件。这些限制使SMTP通信容易受到电子邮件欺骗、垃圾邮件、蠕虫和中间人(MitM)攻击。

MIME被提出作为这些限制的解决方案。

MIME的起源

1991年,当时是Bellcore技术人员的Nathaniel Borenstein向互联网工程任务组(IETF)提议扩展SMTP,以便Web(和其他互联网)客户端和服务器能够识别和处理所有类型的数据,而不仅仅是基于拉丁语的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标头为标头指示的数据类型选择适当的播放器应用程序。某些播放器内置于Web客户端或浏览器中。例如,所有浏览器都带有GIF和JPEG图像播放器,并且可以处理HTML文件。其他播放器可能需要下载。

在发送端,MIME将非ASCII数据转换为7位网络虚拟终端(NVT)数据。7位ASCII可以表示128个字符。然后MIME将此转换后的数据传递给客户端SMTP。在接收端,消息被转换回原始数据,允许收件人查看其内容,无论它包含文本、音频、视频还是其他类型的数据。

MIME标头字段

MIME标头包含多个子部分,包括:

MIME版本

此标头字段指示消息是MIME格式的。其值通常为"1.0”。

内容类型

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

  • 类型:数据类型的通用类别(例如,视频或文本)
  • 子类型:MIME类型表示的确切数据类型

MIME类型不区分大小写。可以向MIME类型添加可选参数以提供其他详细信息。因此,如果参数是"charset",它将指定用于数据字符的字符集。如果未指定此参数,MIME将使用默认的ASCII字符集。

使用"multipart"类型,MIME允许邮件消息具有以树状结构排列的部分,以支持:

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

内容处置

此标头指定电子邮件消息的呈现样式。处置可能是:

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

RFC 2183指定了内容处置标头。

内容传输编码

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

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