SMTP——MIME

时间:2023-03-08 22:25:45
SMTP——MIME

MIME 基础知识

  • MIME 表示多用途 Internet 邮件扩允协议。MIME 扩允了基本的面向文本的 Internet 邮件系统,以便可以在消息中包含二进制附件。

  • MIME 信息由正常的 Internet 文本邮件组成,文本邮件拥有符合 RFC 2822/5322 的信息头和格式化过的信息体。

  • MIME 协议的 RFC 地址:https://www.ietf.org/rfc/rfc2045.txt 。

MIME 信息剖析

一封普通的文本邮件的信息包含一个头部分(例如:From、To、Subject 等等)和一个体部分。体部分通常为单体类型(例如:text、image、audio、video、application 等等)或是复合类型(即:multipart)。头部分和体部分之间用一个空行进行分隔,并且体部分的类型由信头内容类型字段 Content-Type 描述。

  • 信头含义 (Headers)
域名 含义
Received 传输路径
Return-Path 回复地址
Delivered-To 发送地址
Reply-To 回复地址
From 发件人地址
To 收件人地址
Cc 抄送地址
Bcc 暗送地址
Date 日期和时间
Subject 主题
Message-ID 消息 ID
MIME-Version MIME 版本
Content-Type 内容的类型
Content-Transfer-Encoding 内容的传输编码方式
  • 内容类型(Content-Type),表现形式为:Content-Type: [type]/[subtype]。

     其中 type 的形式为:

text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的。
          Image:用于传输静态图片数据。
          Audio:用于传输音频或者音声数据。
          Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。
          Application:用于传输应用程序数据或者二进制数据。
          Message:用于包装一个 E-mail 消息。
          Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据。

其中 subtype 用于指定 type 的详细形式,常用的 subtype 如下所示:

text/plain(纯文本)
          text/html(HTML 文档)
          application/xhtml+xml(XHTML 文档)
          image/gif(GIF 图像)
          image/jpeg(JPEG 图像)
          image/png(PNG 图像)
          video/mpeg(MPEG 动画)
          application/octet-stream(任意的二进制数据)
          message/rfc822(RFC 822 形式)
          multipart/alternative(HTML 邮件的 HTML 形式和纯文本形式,相同内容使用不同形式表示。)

  • 内容传输编码(Content-Transfer-Encoding),指定内容区域使用的字符编码方式。通常为:7bit,8bit,binary,quoted-printable,base64。

MIME 的信体部分

  • 邮件中常见的简单类型有 text/plain(纯文本)和 text/html(超文本)。

复杂的邮件内容格式采用 multipart 类型,可以包括纯文本/超文本、内嵌资源(图片)、附件类型等等。

multipart 类型的邮件体被分为多个段,每个段又包含段头和段体两部分,这两部分之间也以空行分隔。

段头含义:

域名 含义
Content-Type 段体的类型
Content-Transfer-Encoding 段体的传输编码方式
Content-Disposition 段体的安排方式
Content-ID 段体的 ID
Content-Location 段体的位置(路径)
Content-Base 段体的基位置

1,常见的 multipart 类型有三种:multipart/mixed, multipart/related 和 multipart/alternative。

  ●  multipart/mixed类型
       如果一封邮件中含有附件,那邮件的Content-Type域中必须定义multipart/mixed类型,邮件通过multipart/mixed类型中定义的boundary标识将附件内容同邮件其它内容分成不同的段。基本格式如下:
       Content-Type: multipart/mixed;
                 boundary="{分段标识}"
     ●  multipart/alternative类型
       MIME邮件可以传送超文本内容,但出于兼容性的考虑,一般在发送超文本格式内容的同时会同时发送一个纯文本内容的副本,如果邮件中同时存在纯文本和超文本内容,则邮件需要在Content-Type域中定义multipart/alternative类型,邮件通过其boundary中的分段标识将纯文本、超文本和邮件的其它内容分成不同的段。基本格式如下:
    Content-Type: multipart/alternative;
                 boundary="{分段标识}"
     ●  multipart/related类型
       MIME邮件中除了可以携带各种附件外,还可以将其它内容以内嵌资源的方式存储在邮件中。比如我们在发送html格式的邮件内容时,可能使用图像作为 html的背景,html文本会被存储在alternative段中,而作为背景的图像则会存储在multipart/related类型定义的段中。基本格式如下:
    Content-Type: multipart/related;
                 type="multipart/alternative";
                 boundary="{分段标识}"
  2,multipart类型的boundary属性
    multipart的子类型中都定义了各自的boundary属性,邮件使用这些boundary中定义的字符串作为标识,将邮件内容分成不同的段,段体内的每个子段以“--”+boundary行开始,父段则以“--”+boundary+“--”行结束,不同段之间用空行分隔。