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+“--”行结束,不同段之间用空行分隔。
SMTP——MIME的更多相关文章
- 什么是mime类型
本文转自:什么是mime类型 - 方法数码 http://www.fangfa.net/webnews/390.html MIME 类型在网站开发中经常碰到,特别是处理非文本数据的请求时(如:文件上传 ...
- python实现邮件发送
实例补充: #**************************利用STMP自动发送邮件******************************import smtplibsmtp = smtp ...
- SOAP和REST
SOAP: Simple Object Access Protocol REST: Representation State Transfer SOAP的简单介绍 SOAP可使用多种协议进行传输,用于 ...
- 企业网管用linux搭建邮件服务器为公司降本增效
在企业中,节约一分钱比挣一分钱容易得多,这是指导企业降本增效的名言之一啊,作为一名企业里的IT人员我是深有感触,尤其是IT方面,除了在互联网公司是生产力的排头兵,在制造业单位里那一般都是后勤保障部门, ...
- pdi vcard-2.1
vCard The Electronic Business Card Version 2.1 A versit Consortium Specification September 18, 1996 ...
- Suricata的规则解读(默认和自定义)
不多说,直接上干货! 见suricata官网 https://suricata.readthedocs.io/en/latest/rules/index.html 一.Suricata的规则所放位置 ...
- 基于CentOS6.5或Ubuntu14.04下Suricata里搭配安装 ELK (elasticsearch, logstash, kibana)(图文详解)
前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 基于Ubuntu14.04下Suricata(一款高性能的网络ID ...
- suricata.yaml (一款高性能的网络IDS、IPS和网络安全监控引擎)默认配置文件(图文详解)
不多说,直接上干货! 前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 或者 基于Ubuntu14.04下Suric ...
- curl 使用手册
curl.1 the man page Related: Manual FAQ HTTP Scripting NAME curl - transfer a URL SYNOPSIS curl [opt ...
随机推荐
- 前端切图相关ps技术
标签(空格分隔): 前端切图 复制图层到一个新的ps文件 对于单个图层 1.选中图层 2.CTRL+A全选 3.CTRL+C 4.CTRL+N新建文件,文件大小默认就可以(背景透明也在这个面板设置), ...
- 佣金维护测试sql
SELECT bmc.memberid , case then decode(bmc.source, , , 'TOPfitIBL') ELSE decode(bmc.source, , , 'TOP ...
- python response.text和response.content的区别
1.重点理解 response.text返回的类型是str response.content返回的类型是bytes,可以通过decode()方法将bytes类型转为str类型 推荐使用:respo ...
- [转帖]CPU 的缓存
缓存这个词想必大家都听过,其实缓存的意义很广泛:电脑整机最大的缓存可以体现为内存条.显卡上的显存就是显卡芯片所需要用到的缓存.硬盘上也有相对应的缓存.CPU有着最快的缓存(L1.L2.L3缓存等),缓 ...
- windows版本 rac 报错信息
原因 - 安装程序无法在一个或多个节点上执行指定的脚本.这可能是由于在节点上执行脚本时出现异常错误. 操作 - 有关详细信息, 请查看日志文件 'C:\Users\ADMINI~1\AppData\L ...
- 【问底】王帅:深入PHP内核(一)——弱类型变量原理探究
来源:CSDN http://www.csdn.net/article/2014-09-15/2821685-exploring-of-the-php 作者:王帅 摘要:PHP作为一门简单而强大 ...
- 半夜思考, 为什么建议重写 equals() 方法时, 也要重写 hashCode() 方法
我说的半夜, 并不是真正的半夜, 指的是在我一个人的时候, 我会去思考一些奇怪的问题. 要理解 hashCode() 需要理解下面三个点: hash契约 哈希冲突 哈希可变 第一点: hash 契约指 ...
- 给表格控件DBGrid加上记录序号的列
DBGrid使用起来还是很方便的,但就是没有显示记录序号的功能,必须自己加,参照老外给的解决方案如下: 方案1: 1- 在DBGrid建一个第一列 (列的名字起“NO”) 2- 在DBGrid事件 D ...
- Qt——用于表格QTableView的模型
如果想使用表格来呈现数据,Qt提供了一个方便的部件QTableWidget,但是直接用它实现一些功能可能比较困难.这里将介绍一种强大.灵活的方式来操作表格. 一.模型/视图架构 在这个架构中,模型用于 ...
- HNOI2013旅行
一道欺负我智商的题... 本来想打单调队列优化dp的,结果看到算法标签就点了此题 洛谷题面 首先你要理解题意,蒟蒻理解了好久.它就是说,给你一个由1和-1组成的数列,让你分成m段,并让这m段区间和最大 ...