EML文件格式
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 | X-RM-TagInfo: emlType=0 |
- 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 | ------KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ |
text/plain类型,charset是UTF-8,quoted-printable代表ASCII编码。即正文为:123
片段2:
1 | ------KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ |
text/html类型,charset是UTF-8,quoted-printable代表ASCII编码。即正文为:123,经过样式包装。
两个分段含义一样,是为了方便客户端解码所以分成两种格式。
片段3:
1 | ------KW8QK1GQAY68IL6W0EU1P4BKRLW9AJ-- |
代表分段结束。
由于包含附件eml太长所以不以带附件eml举例,实际上附件亦通过multiple和boundary分段区分,只是附件内容会比较长。
一般正文文字内容使用Base64编码,附件内容使用quoted-printable编码。