MIME格式解析
—
邮件例子
一个MIME格式的邮件例子如下:
Return-Path: <mlemos@acm.org>
To: Manuel Lemos <mlemos@linux.local>
Subject: Testing Manuel Lemos' MIME E-mail composing and sending PHP class: HTML message
From: mlemos <mlemos@acm.org>
Reply-To: mlemos <mlemos@acm.org>
Sender: mlemos@acm.org
X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf"
Message-ID: <20050430192829.0489.mlemos@acm.org>
Date: Sat, 30 Apr 2005 19:28:29 -0300
--652b8c4dcb00cdcdda1e16af36781caf
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
aGVsbG8uIOWNj+iuruWIhuaekOS4jui/mOWOnw==
--652b8c4dcb00cdcdda1e16af36781caf
Content-Type: text/plain; name="attachment.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="attachment.txt"
VGhpcyBpcyBqdXN0IGEgcGxhaW4gdGV4dCBhdHRhY2htZW50IGZpbGUgbmFtZWQgYXR0YWNobWVu
dC50eHQgLg==
--652b8c4dcb00cdcdda1e16af36781caf--
在这封邮件里,包含了三个MIME的语句:
MIME-Version:
Content-Type:
—
格式说明
一个MIME消息由两部分组成,分别是消息头和消息体。
在消息头中,语句“MIME-Version: 1.0”是必须的。
而“Content-Type:”项,则是描述数据的类型和编码,默认为“text/plain”,“/”前后分别为主要类型和次要类型,常见的类型有:
text/plain
text/html
image/jpeg
audio/mpeg
video/3gpp
application/gzip
application/rtf
multipart/alternative
详细的类型可参考http://www.iana.org/assignments/media-types/media-types.xhtml。
对每个“Content-Type:”,有不同的参数,如charset,name,boundary等。
主类型“multipart”是MIME的精髓所在,它将多种数据编码在一起,常见的有“multipart/mixed“,” multipart/related“和”multipart/alternative”。
当“Content-Type:”为“multipart/mixed”等时,表示数据为多种内容的混合,此时会有类似boundary="652b8c4dcb00cdcdda1e16af36781caf"的分隔线描述,分隔线会将数据内容分隔成各自独立的部分,在各部分中,分别有独立的数据内容描述。分隔线的前后,会有“--”,处理过程中过滤即可。
“Content-Transfer-Encoding: ”描述的是内容的编码转换格式。一般有“base64”和“quoted-printable”两种,即表示内容为BASE64编码和QP编码。
“Content-Disposition: ”描述的是数据的安排方式,如“attachment”表示为附件,“inline”表示为内嵌数据,这些有参数“filename”。
消息体是消息头的各个描述及分隔线之外,在各个0x0d0x0a对之间的内容,一般是各种编码了的数据。
虽然介绍了这么多,但在数据解析中用起来很简单,只需要找到各个数据段的描述,名称,内容,就可进行编码转换、形成结构化数据并保存了。
长按进行关注。
MIME格式解析的更多相关文章
- plist文件、NSUserDefault 对文件进行存储的类、json格式解析
========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...
- MySQL binlog的格式解析
我搜集到了一些资料,对理解代码比较有帮助. 在头文件中binlog_event.h中,有描述 class Log_event_header class Log_event_footer 参见[Myst ...
- JSON格式解析和libjson使用简介(关于cjson的使用示例)
JSON格式解析和libjson使用简介 在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据 ...
- 转:YUV RGB 常见视频格式解析
转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...
- TS格式解析
1.TS格式介绍 TS:全称为MPEG2-TS.TS即"Transport Stream"的缩写.它是分包发送的,每一个包长为188字节(还有192和204个字节的包).包的结构为 ...
- 虚拟机VHD格式解析到NTFS文件系统解析
本来的需求是XEN下的镜像取证,但这篇仅包括他支持的一种格式,就是VHD,此项目从头开始大概用了两周时间,中间遇到了很多让人头大的问题,光是思考的笔记就写了十几页纸,不过实际上并没有那么难,主要是很久 ...
- freemarker导出word文档——WordXML格式解析
前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...
- POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
一.使用poi解析excel文档 注:全部采用poi接口进行解析,不需要区分xls.xlsx格式,不需要判断文档类型. poi中的日期格式判断仅支持欧美日期习惯,对国内的日期格式并不支持判断,怎么办? ...
- 一步一步从原理跟我学邮件收取及发送 13.mime格式与常见字符编码
在前面的本系列文章中我们已经学会了邮件的发送和收取.但在收取中我们看到的是一串串的乱码,回忆前面的发送过程,我们会奇怪:我们前面的邮件是明文啊.为什么明文的邮件明明也可以正常工作,还要弄乱码似的字符串 ...
随机推荐
- python Windows环境下文件路径问题
转自:http://blog.sina.com.cn/s/blog_5ee7254801013zu7.html 在python程序里面我们经常需要对文件进行操作,Windows下的文件目录路径使用反斜 ...
- [browser location和history] 简单实现了个路由[转载]
今天看了1下前面写的,好像缺乏交流性,周末再来弄吧 -0- 今天看了browser 的 location 和 history location属性 // //location.hash 性是一个可读可 ...
- 用XHR简单封装一个axios
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- OPENGL 入门
检测设备支持版本,判断是否支持opengl 2.0版本 初始化设置OpenGLES2.0 实现接口GLSurfaceView.Renderer 渲染 绘制图形 1.检测设备支持版本,判断是否支持ope ...
- 使用VSCode创建一个Vue项目
vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 安装vue-cli之前,需要先安装了vue和webpack · node -v //(版本低引起:bas ...
- pymysql连接
import pymysql conn=pymysql.connect(host='localhost',user='root',password='123',db='sg',charset='utf ...
- 如何用css实现弧度圆角?三角形以及圆形
用css画矩形圆角 ,需要使用到border-radius这个属性,下图四角圆,代码显示如下:border-radius:60px; width:360px; height:200px; border ...
- 201871010116-祁英红《面向对象程序设计(java)》第十二周学习总结
博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...
- HashMap默认加载因子为什么选择0.75?(阿里)
Hashtable 初始容量是11 ,扩容 方式为2N+1; HashMap 初始容量是16,扩容方式为2N; 阿里的人突然问我为啥扩容因子是0.75,回来总结了一下: 提高空间利用率和 减少查询成本 ...
- Intellj IDEA 快捷键冲突
Intellij IDEA快捷键冲突 [问题描述]: ctr + alt + 方向键 与系统的快捷键冲突,按快捷键,屏幕方向发生改变. [解决办法]: ctr + alt + F12 调用出Intel ...