邮件例子

一个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格式解析的更多相关文章

  1. plist文件、NSUserDefault 对文件进行存储的类、json格式解析

    ========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...

  2. MySQL binlog的格式解析

    我搜集到了一些资料,对理解代码比较有帮助. 在头文件中binlog_event.h中,有描述 class Log_event_header class Log_event_footer 参见[Myst ...

  3. JSON格式解析和libjson使用简介(关于cjson的使用示例)

    JSON格式解析和libjson使用简介 在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据 ...

  4. 转:YUV RGB 常见视频格式解析

    转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...

  5. TS格式解析

    1.TS格式介绍 TS:全称为MPEG2-TS.TS即"Transport Stream"的缩写.它是分包发送的,每一个包长为188字节(还有192和204个字节的包).包的结构为 ...

  6. 虚拟机VHD格式解析到NTFS文件系统解析

    本来的需求是XEN下的镜像取证,但这篇仅包括他支持的一种格式,就是VHD,此项目从头开始大概用了两周时间,中间遇到了很多让人头大的问题,光是思考的笔记就写了十几页纸,不过实际上并没有那么难,主要是很久 ...

  7. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

  8. POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)

    一.使用poi解析excel文档 注:全部采用poi接口进行解析,不需要区分xls.xlsx格式,不需要判断文档类型. poi中的日期格式判断仅支持欧美日期习惯,对国内的日期格式并不支持判断,怎么办? ...

  9. 一步一步从原理跟我学邮件收取及发送 13.mime格式与常见字符编码

    在前面的本系列文章中我们已经学会了邮件的发送和收取.但在收取中我们看到的是一串串的乱码,回忆前面的发送过程,我们会奇怪:我们前面的邮件是明文啊.为什么明文的邮件明明也可以正常工作,还要弄乱码似的字符串 ...

随机推荐

  1. 【xmind】 使用 Java 生成思维导图

    前言 在日常的工作与学习中,我们经常会使用思维导图这个工具,来把抽象而又无形的思考转换成有形并且具体的图像,是理清思路,梳理逻辑的一大神器. 准确的说,思维导图并不是一个具体的工具,而是一种方法.是道 ...

  2. GROUP BY中的WITH CUBE、WITH ROLLUP原理测试及GROUPING应用

    前几天,看到一个群友用WITH ROLLUP运算符.由于自个儿没用过,看到概念及结果都云里雾里的,所以突然来了兴趣对生成结果测了一番. 一.概念: WITH CUBE:生成的结果集显示了所选列中值的所 ...

  3. (转)Python- sklearn之最小二乘法

    最小二乘法:https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95/2522346?fr=aladdin ...

  4. python链式调用REST API把参数放到URL中

    需求格式:GET /users/:user/repos 程序: class Chain(object): def __init__(self,path=''): self._path=path def ...

  5. MySQLl存储过程学习总结

    1.简介 : 逻辑处理一般不是一条语句组成,需要多条之间相互配合使用              这时,存储过程就是为了以后使用而保存的的一条或多条Mysql语句的集合 2.为何 : 1)简单:将处理单 ...

  6. 结对编程项目复盘:带UI的小初高数学学习软件

    实现个人项目时,由于我当时的Java GUI编程基础还比较薄弱,所以我选择通过命令行实现,并将编程开发的重点放到了算法效率上去.没能设计出用户体验更佳的UI成为了我在个人项目阶段最大的遗憾. 在这次结 ...

  7. Vue组件化开发

    Vue的组件化 组件化是Vue的精髓,Vue就是由一个一个的组件构成的.Vue的组件化设计到的内容又非常多,当在面试时,被问到:谈一下你对Vue组件化的理解.这时候又有可能无从下手,因此在这里阐释一下 ...

  8. SAP 固定资产添加新类别

    需求:添加资产新类别(LEASE) 步骤: 1.添加 Account determination ①SPRO->Financial Accounting(New)->Asset Accou ...

  9. [转]Java虚拟机类加载机制

    原文地址:http://blog.csdn.net/u013256816/article/details/50829596 看到这个题目,很多人会觉得我写我的java代码,至于类,JVM爱怎么加载就怎 ...

  10. 网络编程~~~osi五层协议

    物理层 / 数据链路层 / 网络层 / 传输层 / 应用层(表示层/会话层) 一 物理层 物理层指的就是网线,光纤, 双绞线等物理传输介质 物理层发送的是数据(比特流) 二 数据链路层 数据链路层对数 ...