EML文件(MIME邮件)格式分析
电子邮件普遍遵循的邮件技术规范。
MIME邮件由邮件头和邮件体两部分组成。
邮件头包括:标题,送信人,收信人,创建日期,邮件体内容类型和邮件体编码方式等内容。
邮件体包括:正文,超文本,内嵌数据和附件等内容。
MIME技术规范的完整内容由RFC 2045-2049定义,包括了信息格式、媒体类型、编码方式等各方面的内容,本文只介绍其中的一些关键的格式和规范。
1.域
MIME邮件中的重要信息都记录在邮件内的各个域中。
域的基本格式是 {域名}:{内容}。
一个域占一行或多行,域的首行左侧不能有空白字符,占多行的域其后续行必须以空白字符开头。
域的信息内容中还可以包含属性,属性之间以“;”分隔,属性格式是{属性名}="{属性值}"。
域的内容的编码格式是"=?"+编码名称+"?"+B/Q+"?"+编码后的字符序列+"?="。(B代表base64的编码方式,Q代表quoted-printable的编码方式)
2.Content-Type域
Content-Type域定义了邮件中各种内容的形式及属性。
Content-Type域的基本格式是 Content-Type:{主类型}/{子类型}。
Content-Type的主类型分text,image,audio,video和application五种离散类型以及multiple和message两种复合类型。
text类型有plain和html两种常用的子类型。
multiple类型有mixed,alternative和related三种常用的子类型。
3.multiple类型
·multiple类型基本格式
multiple类型基本格式是 Content-Type: multipart/{子类型};boundary="{分段标识}"
三种子类型的对比:
------------------------------------------------------------------
|类型名 |邮件种类 |boundary作用 |
------------------------------------------------------------------
|multiple/mixed |有附件 |分隔各附件内容和邮件其他内容 |
------------------------------------------------------------------
|multiple/alternative|有超文本 |分隔纯文本,超文本和邮件其他内容|
------------------------------------------------------------------
|multiple/related |有内嵌资源|分隔各内嵌资源和邮件其他内容 |
------------------------------------------------------------------
·boundary属性
multiple子类型中都定义了各自的boundary属性,邮件中使用boundary中定义的字符串作为标识,将邮件内容分成不同的段,段内每个字段以"--"+boundary中定义的字符串开始,父段则以"--"+boundary中定义的字符串+"--"结束,不同段之间用空行分隔。
·multiple类型的层次关系
------------------------------
|multiple/mixed |
------------------------------
| |multiple/related | |
------------------------------
| | |multiple/alternative| | |
------------------------------
| | |纯文本正文 | | |
------------------------------
| | |超文本正文 | | |
------------------------------
| |内嵌资源 | |
------------------------------
|附件 |
------------------------------
4.Content-Transfer-Encoding域
Content-Transfer-Encoding域定义段内文字的编码方式,不同段可以有不同的编码方式。
MIME邮件中的数据编码普遍采用base64和quoted-printable两种编码。
·base64编码的算法
编码的原则是将输入数据全部转换成由{'A'-'Z','a'-'z','0'-'9','+','/'}64个ASCII字符组成的字符序列。
编码时将需要转换的数据每次取出6bit,然后转换成十进制数字,查询64个ASCII字符组成的字典表,输出对应位置的ASCII码字符。每3个字节的数据内容会被转换成4个字典中的ASCII码字符。当转换后的数据不是4的整倍数时,用"="来填充。
·quoted-printable编码的算法
编码的原则是将输入的数据转换成可打印的ASCII码字符。
编码时根据读入内容来决定是否进行编码,如果读入的字节处于33-60,62-126范围内,属可直接打印的ASCII字符,则直接输出,否则将该字节分为两个4bit,每个用一个十六进制数来表示,然后再前面加上"=",每个需要编码的字节被转换成三个字符来表示。
转载于:http://hankundev.blog.sohu.com/104046669.html
EML文件(MIME邮件)格式分析的更多相关文章
- MIME邮件格式
转自:http://kptu.iteye.com/blog/890180 排版做了调整. Q.什么是MIME?什么是MIME邮件? A. MIME, 全称为"Multipurpose Int ...
- after effects的xml格式工程文件aepx的格式分析(一)
表面上看,AE的工程文件可以另存为xml格式,我们可以通过直接编辑XML来做一些事情. 很可惜,通过aepx文件修改AE工程,能做到的非常有限.理由是: 1.重要的属性都放在了标签的bdata这个属性 ...
- PDF格式分析
系列文章是csdn作者'秋风之刀'写的,我只是把目录列出来而已,感谢作者辛苦付出. PDF格式分析(一)简介 PDF格式分析(二)语法之对象 PDF格式分析(三)语法之Filter PDF格式分析(四 ...
- 邮件MIME格式分析
http://www.cnblogs.com/crystalray/articles/3302427.html 邮件mime格式 参考: rfc4021,Registration of Mail an ...
- MIME协议(一) -- RFC822邮件格式
MIME协议(一) -- RFC822邮件格式 . 如同其他各种电子文档一样,电子邮件内容也必须遵循一定的格式要求,各种邮件处理程序才能从中分析和提取出发件人.收件人.主题和附件等信息.邮件内容的 ...
- HTTP POST请求报文格式分析与Java实现文件上传
时间 2014-12-11 12:41:43 CSDN博客 原文 http://blog.csdn.net/bboyfeiyu/article/details/41863951 主题 HTTPHt ...
- [PHP] MIME邮件协议的multipart类型
邮件协议中的三种情况,对应下面的三种类型 multipart/mixed可以包含附件.multipart/related可以包含内嵌资源.multipart/alternative 纯文本与超文本共存 ...
- SharePoint 2013中的默认爬网文件扩展名和分析文件类型
摘要:了解默认情况下 SharePoint 2013 爬网的文件扩展名及其解析的文件类型,可以借此了解搜索可以爬的文件和支持的功能. 如果“管理文件类型”页上的列表包含文件扩展名,爬网组件将仅爬网文件 ...
- MIME协议(三) -- MIME邮件的组织结构
一封MIME邮件可以由多个不同类型的MIME消息组合而成,一个MIME消息表示邮件中的一个基本MIME资源或若干基本MIME消息的组合体.每个MIME消息的数据格式与RFC822数据格式相似,也包括头 ...
随机推荐
- 对vue的solt的理解
//父 <children> <span>12345</span>//这边不会显示 </children> //子 components: { chil ...
- 神经网络内在逻辑:没打开的AI“黑匣子”
转载自:http://www.elecfans.com/rengongzhineng/592200.html 伴随着大数据,AI在沉寂了多年之后,又迎来了新的高潮.在这场涉及大部分科学的革命中,人工神 ...
- scrapy项目4:爬取当当网中机器学习的数据及价格(CrawlSpider类)
scrapy项目3中已经对网页规律作出解析,这里用crawlspider类对其内容进行爬取: 项目结构与项目3中相同如下图,唯一不同的为book.py文件 crawlspider类的爬虫文件book的 ...
- express 设置 cookie 以及 httpOnly
权限控制基本 cookie 在 express 中引入 cookie-parser const express = require('express') const cookieParser = re ...
- sqli-labs(26)
0X01 测试闭合 单引号报错 双引号不报错 ’闭合 构造语句 过滤了空格和and ?id=' anandd 1=1%23 ?id='+anandd+1=1%23 百度一下 一去看源码 真的顶不住 ...
- linux 目录介绍
/boot: 系统启动相关的文件,如内核.initrd,以及grub(bootloader)/dev: 设备文件 /etc:配置文件/home:用户的家目录,每一个用户的家目录通常默认为/home/U ...
- 【机器学习速成宝典】模型篇05朴素贝叶斯【Naive Bayes】(Python版)
目录 先验概率与后验概率 条件概率公式.全概率公式.贝叶斯公式 什么是朴素贝叶斯(Naive Bayes) 拉普拉斯平滑(Laplace Smoothing) 应用:遇到连续变量怎么办?(多项式分布, ...
- Oracle Mysql MSSql 三种数据库 随机查询 条 语句
1. Oracle,随机查询查询语句-20条 select * from ( select * from 表名 order by dbms_random.value ) where rownum ...
- kafka-manager怎么查看topic里的数据量
https://jingyan.baidu.com/article/eb9f7b6d367679869364e8d4.html
- "error" : "Content-Type header [application/x-www-form-urlencoded] is not supported"
https://blog.csdn.net/weixin_40161254/article/details/86000839 Es Head https://www.cnblogs.com/afeig ...