eml文件格式

EML文件格式

参考rfc2045至2049

MIME邮件由邮件头和邮件体两部分组成。
邮件头包括:标题,送信人,收信人,创建日期,邮件体内容类型和邮件体编码方式等内容。
邮件体包括:正文,超文本,内嵌数据和附件等内容。


  • 域的基本格式是 {域名}:{内容}。

  • Content-Type域
    Content-Type域的基本格式是 Content-Type:{主类型}/{子类型}。
    Content-Type的主类型分text,image,audio,video和application五种离散类型以及multiple和message两种复合类型。
    其中text类型有plain和html两种常用的子类型。
    multiple类型有mixed,alternative和related三种常用的子类型。

  • multiple类型基本格式
    multiple类型基本格式是 Content-Type: multipart/{子类型};boundary=“{分段标识}”

  • boundary属性
    multiple子类型中都定义了各自的boundary属性,邮件中使用boundary中定义的字符串作为标识,将邮件内容分成不同的段,段内每个字段以”—“+boundary中定义的字符串开始,父段则以”—“+boundary中定义的字符串+”—“结束,不同段之间用空行分隔。

  • Content-Transfer-Encoding域
    Content-Transfer-Encoding域定义段内文字的编码方式,不同段可以有不同的编码方式。MIME邮件中的数据编码普遍采用Base64和quoted-printable两种编码。

以一封邮件eml为例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
X-RM-TagInfo: emlType=0                                       
X-RM-SPAM:
X-RM-SPAM-FLAG:00000000
Received:from [IPV6:2409:8955:654:dc7:472d:37b0:9e7d:6a74] (unknown[2409:8955:654:dc7:472d:37b0:9e7d:6a74])
by rmsmtp-rmapp-10-12026 (RichMail) with SMTP id 2efa5cff1349bf9-db003;
Tue, 11 Jun 2019 10:34:51 +0800 (CST)
X-RM-TRANSID:2efa5cff1349bf9-db003
User-Agent: 139mail Mail for Android
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="----KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ"
Subject: 123
From: =?UTF-8?B?6buE5aCJ?= <13802885144@139.com>
Date: Tue, 11 Jun 2019 10:34:49 +0800
To: =?UTF-8?B?6buE5aCJ?= <13802885144@139.com>
Message-ID: <296bb951-4660-4742-a662-73097cc1572c@email.android.com>

------KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: quoted-printable

123
------KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ
Content-Type: text/html;
charset=utf-8
Content-Transfer-Encoding: quoted-printable

<font color =3D"#929292"><font size =3D"2">123</font></font>
------KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ--

  • X-RM-TagInfo、X-RM-SPAM、X-RM-SPAM-FLAG、X-RM-TRANSID:自定义字段
  • User-Agent:UA,来自139邮箱Android客户端
  • MIME-Version:MIME版本
  • Received:来源
  • Subject:主题
  • From:发送方
  • To:接收方
  • Date:日期
  • Message-ID:邮件唯一标志
  • Content-Type: multipart/alternative; boundary=”—-KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ”
    multipart/alternative类型,分段标识是“—-KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ”

片段1:

1
2
3
4
5
6
------KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: quoted-printable

123

text/plain类型,charset是UTF-8,quoted-printable代表ASCII编码。即正文为:123

片段2:

1
2
3
4
5
6
------KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ
Content-Type: text/html;
charset=utf-8
Content-Transfer-Encoding: quoted-printable

<font color =3D"#929292"><font size =3D"2">123</font></font>

text/html类型,charset是UTF-8,quoted-printable代表ASCII编码。即正文为:123,经过样式包装。
两个分段含义一样,是为了方便客户端解码所以分成两种格式。

片段3:

1
------KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ--

代表分段结束。

由于包含附件eml太长所以不以带附件eml举例,实际上附件亦通过multiple和boundary分段区分,只是附件内容会比较长。
一般正文文字内容使用Base64编码,附件内容使用quoted-printable编码。

0%