MIME协议及邮件格式分析
- 格式:doc
- 大小:352.00 KB
- 文档页数:16
MIME协议(五)--MIME邮件的编码⽅式5 MIME邮件的编码⽅式由于每个ASCII码字符只占⽤⼀个字节(8个bit位),且最⾼bit位总为0,即ASCII码字符中的有真正意义的信息只是后⾯的7个低bit位,⽽传统的SMTP协议⼜是基于ASCII码字符设计的,因此,⼀些基于传统SMTP协议设计的SMTP服务器在处理邮件内容时只取出每个字节中的7个低bit位进⾏处理,⽽将最⾼bit位忽略不计。
显然,这样的SMTP服务器在处理包含有⾮ASCII码字符的邮件内容时,会出现严重的问题,这就限制了邮件中只能出现英⽂的ASCII码字符,⽽不能出现中⽂字符或⼆进制数据。
为了能够在邮件内容中包含中⽂、图像或声⾳等⾮ASCII字符的数据,⼈们想到了采⽤某种编码⽅式将⾮ASCII字符的数据转换成可打印的ASCII字符后再发送,邮件阅读程序则按照相应的解码⽅式从邮件中还原出原始数据即可,⽐较常⽤的两种邮件编码⽅式为BASE64和Quoted-printable。
后来的扩展SMTP协议允许直接在邮件中传递⼆进制数据,⽽不⽤对它们进⾏邮件编码,⼈们将这种没有进⾏邮件编码的⼆进制数据的邮件内容称为8bit编码,为了与此相区别,⼈们将没有进⾏邮件编码的纯ASCII码字符的邮件称为7bit编码。
MIME消息体的邮件编码⽅式通过MIME消息头中的Content- Transfer- Encoding头字段指定,每种邮件编码⽅式的介绍如下:— 7Bit指消息体内容全部是没有经过编码的ASCII字符。
— 8Bit指消息体内容是没有经过编码的原始数据,且其中包含有⾮ASCII字符的数据。
现在的邮件服务器基本上都⽀持8Bit编码,使⽤⽀持8Bit 编码的邮件服务器可以简化邮件的处理过程。
— BASE64Base64是将⼆进制数据转换成可打印的ASCII字符的⼀种最常见的编码⽅式,它的基本原理是将⼀组连续的字节数据按6个bit位进⾏分组,然后对每组数据⽤⼀个ASCII字符来表⽰。
计算机网络原理多用途因特网邮件扩展(MIME)前面我们学习SMTP发送程序,而在读取邮件过程中又分为两种协议。
一种是邮局协议第3个版本POP3和因特网报文存取协议IMAP。
邮局协议POP是一个非常简单、但功能有限的邮件读取协议。
邮局协议POP最初公布于1984年。
现在所使用的POP3是通过多次更新,也称为POP第三个版本。
它已经成为Internet的正式标准。
POP也使用客户服务器的工作方式。
在接收邮件的用户计算机中必须运行POP客户程序,而在用户所连接的ISP的邮件服务中则运行POP服务器程序以及SMTP服务器程序,以便接收发送方邮件服务器的SMTP客户程序发来的邮件。
POP服务器需要用户输入用户名和口令后才允许对邮箱进行读取。
在这里用户需要了解,邮件服务器只能向其邮件服务器传输电子邮件,而POP服务器除了传输电子邮件外还能向用户提供邮箱内容的信息。
POP3协议的特点是只要用户从POP服务读取邮件,POP服务器就将邮件删除。
下面我们来详细学习邮件扩展协议(MIME)。
Internet邮件扩展协议是RFC822框架结构的扩展,用于解决SMTP和RFC822传递电子邮件时遇到的问题和局限性。
1.MIME概述最初的Internet电子邮件系统只能处理文本,并且信息的主体被限制为ASCII字符,不能包含二进制数据。
但为了发送二进制数据,必须引进一些新的机制。
于是便产生了二进制数据编码成文本形式的方法,以方便这些数据在电子邮件信息中发送。
例如,使用十六进制表示,即数据中每4位映射为0~F中的一个字符。
然后在电子邮件信息中发送个字符序列,并由接收方将这些字符转换成二进制表示。
IETF为了协调和统一发送二进制数据而发明的多种编码方案,而推出了MIME。
MIME 协议定义了5个新报文报头字段,以提供与该报文主体相关的信息;定义了一些内容格式,将支持多媒体电子邮件表示方法标准化;定义了传送编码,使任何内容格式都能转化成一种受邮件系统保护而不被随意改变的格式。
MIME协议多用途互联网邮件扩展的标准MIME(Multipurpose Internet Mail Extensions)即多用途互联网邮件扩展,是一种应用于电子邮件的标准协议。
它的主要作用是扩展了传统的纯文本邮件,使电子邮件可以携带更多类型的数据,包括图像、音频、视频等文件格式。
本文将介绍MIME协议的起源、工作原理以及对互联网邮件系统的影响。
一、MIME协议的起源MIME协议最早由Nathaniel Borenstein和Ned Freed于1992年提出,目的是解决传统纯文本邮件无法携带多媒体文件的问题。
在起初的互联网时代,电子邮件只能发送纯文本内容,无法传输图片、音频和视频等媒体文件。
随着互联网的发展,人们对邮件内容的需求逐渐增加,MIME协议应运而生。
二、MIME协议的工作原理MIME协议通过在邮件头部添加额外的信息来标识邮件的内容类型和编码方式。
这些额外的信息被称为MIME头部信息,通常包括Content-Type、Content-Transfer-Encoding和Content-Disposition等字段。
其中,Content-Type用于指示邮件主体的数据类型,Content-Transfer-Encoding用于指定编码方式,而Content-Disposition则用于指定邮件主体的呈现方式。
MIME协议允许邮件主体以纯文本和HTML格式呈现,并支持多种文件类型的附件。
对于非文本文件,MIME协议会将它们编码成纯文本格式,以便在电子邮件传输过程中不会出现乱码或错误。
接收方的电子邮件客户端会根据MIME头部信息解析邮件内容,并以对应的方式展示给用户。
三、MIME协议对互联网邮件系统的影响MIME协议的引入极大地扩展了电子邮件的功能和应用场景。
通过MIME协议,用户可以通过邮件发送和接收各种类型的文件,如照片、音频文件和视频文件等。
这不仅提升了邮件的表现力,也方便了用户之间的信息交流。
MIME协议的内容分析及解析说明作者:李鹏博时间:2016/06一、MIME协议说明MIME, 全称为“Multipurpose Internet Mail Extensions”, 比较确切的中文名称为“多用途互联网邮件扩展”。
它是当前一种电子邮件技术规范。
MIME不是一种传输协议,而是一种编写规范,常常建立在SMTP协议、HTTP 协议等之上。
二、MIME协议的使用场景MIME协议可以在SMTP基础上,使得邮件可以传输任意二进制文件,广泛用在邮件源码的编写规范上。
除此之外,MIME协议可以在HTTP协议基础上通过POST方法上传附件,有很多站点是使用该协议完成,如SOHU邮箱、263邮箱、QQ邮箱(部分)等。
三、MIME协议包头内容说明及解析以下,将统一名词为:boundary(节)、Content-Type(内容类型)。
1.建立在SMTP协议上的邮件编码关于SMTP协议的说明请参见《简析SMTP协议》,此处主要说明客户端向服务器请求发送DATA之后,整个DATA包体(或一封邮件本身的编码)。
邮件源码查看方式如下,在邮件客户端右击选择“更多操作”->“查看邮件源码”即可。
以上,是一封简单邮件的包头信息,其中关键字说明如下:关于出现汉字,上述示例邮件并未出现汉字,如果出现汉字,就会出现对其编码的现象,比如,这种情况就需要将=?GB2312?B?与?=之间的内容拿出来进行BASE64解码。
这种情况出现在主题、文件名等位置。
关于Content-Type,Content-Type也是个很重要的关键字,他是该包体内容类型的说明。
可能出现的有很多,常用的有:multipart/related;multipart/mixed; multipart/alternative;等。
其中,multipart/alternative出现说明邮件中无附件且只有文字信息;multipart/related出现则说明无附件有文字信息和图片信息;multipart/mixed出现这说明邮件存在附件。
mime 用法
Mime(Multipurpose Internet Mail Extensions)是一种用于标识文件类型的方法,常用于互联网传输和文件处理。
它通过一个独特的标识符来表示每种文件类型,并且可以帮助计算机系统识别文件的正确方式来处理它们。
在互联网上,Mime 用法主要用于电子邮件和浏览器之间的文件传输。
当您发
送电子邮件时,您可以指定邮件的内容类型,以便接收者的邮件客户端知道如何正确地显示或处理该邮件。
这就是 Mime 的作用。
常见的邮件内容类型包括纯文本、HTML、图片、音频和视频等。
此外,Mime 用法在网页开发中也非常重要。
在编写 HTML 代码时,您可以通
过指定相应的 Mime 类型来确保浏览器正确解析和显示您的网页内容。
例如,当您引用外部的 CSS 样式文件时,需要使用 text/css 的 Mime 类型;如果您要嵌入图像
文件,可以使用 image/jpeg、image/png 或 image/gif 等适当的 Mime 类型。
同时,Mime 用法还可以扩展到其他的应用和文件类型。
例如,在服务器上,
通过配置可以为特定的文件扩展名指定正确的 Mime 类型。
这有助于确保当浏览器请求该文件时,服务器能够正确地标识它的内容类型,并采取相应的处理方式。
总之,Mime 用法在互联网传输和文件处理中起着关键的作用。
通过使用正确
的 Mime 类型,我们可以确保文件以正确的方式进行传输和处理,从而为用户提供更好的体验。
无论是在发送电子邮件、编写网页还是处理文件类型,请记住使用适当的 Mime 类型来确保正确解析和显示。
网络安全协议范例在当今信息化时代,网络安全问题日益突出,各种网络攻击和数据泄露事件频频发生,给个人和企业的信息安全带来了巨大威胁。
为了保护网络安全,各国纷纷推出了一系列的网络安全协议。
本文将以网络安全协议范例为题,介绍几种常见的网络安全协议,以供参考。
一、传输层安全协议(TLS)传输层安全协议(Transport Layer Security,简称TLS)是一种常用的网络安全协议,用于保护网络通信的安全性和完整性。
TLS协议通过使用加密算法和身份验证机制,确保数据在传输过程中不被窃听、篡改或伪装。
TLS协议的工作原理如下:首先,客户端和服务器之间建立连接,并协商加密算法和密钥交换方式;然后,双方进行身份验证,确保通信双方的真实身份;最后,使用协商好的密钥对数据进行加密和解密,确保数据的安全性。
二、虚拟专用网络协议(VPN)虚拟专用网络协议(Virtual Private Network,简称VPN)是一种通过公共网络建立起加密通道的安全通信方式。
通过VPN协议,用户可以在不安全的公共网络上建立起一条加密的通信隧道,确保数据在传输过程中不被窃听和篡改。
VPN协议的工作原理如下:首先,用户通过VPN客户端向VPN服务器发起连接请求;然后,VPN服务器对用户进行身份验证,并为用户分配一个虚拟IP地址;最后,用户和VPN服务器之间建立起加密通道,所有经过该通道的数据都会进行加密和解密。
三、域间安全协议(IPsec)域间安全协议(Internet Protocol Security,简称IPsec)是一种用于保护IP数据包传输安全的协议。
IPsec协议通过对IP数据包进行加密和身份验证,确保数据在传输过程中不被窃听、篡改或伪装。
IPsec协议的工作原理如下:首先,通信双方之间建立起安全关联,协商加密算法和密钥交换方式;然后,对IP数据包进行加密和解密,确保数据的机密性;最后,对IP数据包进行身份验证,确保通信双方的真实身份。
MIME协议文档说明书RFC#1521协议简介RFC#822定义了消息头的传输标准,而把消息体当成纯ASCII文本。
这个文档重新定义了消息体的格式,使得消息体在交换非文本信息时不会失真。
同时也使得消息可以在RFC#822主机和X.400主机(认为在消息体中加入非文本信息是合法的)之间进行交换。
该文档主要描述了MIME-Version字段、Content-Type字段、Content-Transfer-Encoding字段。
另外还简单的介绍了两个额外的字段:Content-ID和Content-DescriptionMIME是可扩展的,它允许通过一定的方式向IANA注册新的字段或对现有字段的取值范围进行扩充。
在对文档进行进一步描述之前,需要先界定如下字段的含义:✧"message",当没有进一步说明,它可以表示一个正在网上传输的完整消息,也可表示封装在一个Content Type值为"message/rfc822"或"message/partial"的"body"里的消息。
✧"body part",表示Content-Type值为"multipart"的消息实体的一部分,它有一个头和一个体。
✧"entity",实体,由MIME定义的头和消息或"body part"中的内容组成。
✧"body",表示"message"或"body part"的体部分。
MIME-Version字段该字段用一个版本号说明了消息所要遵循的规范,以区别不兼容的消息版本。
如,MIME-Version: 1.0表示该消息遵循rfc#1521。
为了便于描述以后扩展的消息格式,我们把MIME-Version字段定义为:version := "MIME-Version" ":" 1*DIGIT "." 1*DIGIT;两个被点(".")分开的整数。
过程如下图所示:说明:1、连接SMTP服务器的用户名和密码需要经过base64编码,下面是对用户名和密码进行base64编码的JAVA程序:[java] view plaincopy1.package org.yangxin.study.jm.util;2.3.import java.io.BufferedReader;4.import java.io.IOException;5.import java.io.InputStreamReader;6.7.import sun.misc.BASE64Encoder;8.9.public class Base64Util {10.11.public static void main(String[] args) throws IOException {12. BASE64Encoder encoder = new BASE64Encoder();13. System.out.println("请输入用户名:");14. String username = new BufferedReader(new InputStreamReader(System.in)).readLine();15. System.out.println(encoder.encode(username.getBytes()));16. System.out.println("请输入密码:");17. String password = new BufferedReader(18.new InputStreamReader(System.in))19. .readLine();20. System.out.println(encoder.encode(password.getBytes()));21. }22.}下面通过telnet程序连接163的POP3服务器,来分析邮件的接收过程。
电子邮件的传输协议电子邮件(Email)是当今信息传输中最常用的方式之一,它可以快速、方便地传递文字、图片、文件等各种形式的信息。
而要实现电子邮件的传输,就需要依靠一系列的协议来完成。
本文将介绍电子邮件的传输协议,帮助大家更好地理解电子邮件的传输原理。
首先,我们要了解的是SMTP协议(Simple Mail Transfer Protocol),它是用于发送邮件的协议。
当你发送一封电子邮件时,SMTP协议将会把这封邮件从你的计算机传输到邮件服务器,然后再由邮件服务器发送到接收方的邮件服务器。
SMTP协议是一个简单而有效的协议,它使用TCP协议的25端口进行通信,确保了邮件的可靠传输。
其次,POP3协议(Post Office Protocol 3)和IMAP协议(Internet Message Access Protocol)则是用于接收邮件的协议。
当你的邮件服务器收到新邮件时,它会保存在服务器上,然后你可以通过POP3或IMAP协议从服务器上下载这些邮件到你的计算机或移动设备上。
POP3协议会把邮件下载到本地设备后删除服务器上的邮件,而IMAP协议则会保留服务器上的邮件副本,可以实现多设备同步查看邮件。
另外,还有SMTPS和IMAPS协议,它们是SMTP和IMAP协议的加密版本,用于保护邮件的安全传输。
SMTPS和IMAPS协议使用SSL/TLS加密邮件的传输过程,确保邮件内容不会被窃取或篡改,提高了邮件传输的安全性。
除了上述的协议外,还有一些辅助协议如DNS(Domain Name System)协议和MIME(Multipurpose Internet Mail Extensions)协议等,它们都在电子邮件的传输过程中发挥着重要的作用。
DNS协议用于解析邮件服务器的域名,找到接收方的邮件服务器地址;而MIME协议则是用于在邮件中传输非文本内容(如图片、音频、视频等)的协议。
总的来说,电子邮件的传输协议是一个复杂而完善的系统,它通过一系列的协议和技术保证了电子邮件的可靠传输和安全性。
电子邮件也许是一个Internet上的流行最广泛的应用。
也是我们现在的大多数网络办公流程的基础。
各种邮件服务器很多,但都大都遵循以1982年出版的RFC822--《ARPA网络文本信息格式标准(STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES)》为基础的一系列邮件格式的规定。
RFC(The Requests for Comments)是用来规定互联网工作标准的文档。
我们使用的时候并没有注意到这些协议在我们的邮件通信过程中默默的发挥着的作用,这丝毫也不能减低这些作用的重要性。
邮件内部还有很多不为人知的秘密。
在RFC822中规定一封信包括一个必须的多个头部域(header fields)和一个可选的体部(body)组成。
从一封信头开始至第一个空行都是头部。
头部定义了一个邮件的各项基本要素,路由信息等内容。
在Outlook Express中选定一封信看它的属性。
在详细资料选项卡中显示的就是这封邮件的头部内容。
也可以选定一封信,另存为一个.eml文件。
由于文件是一个纯文本文件,用一般的编辑器打开就可以看到邮件的内容。
头部有各个头部域组成,每一个头部域都包括域名(field-name)和域体(field-body),它们之间以":"分隔。
每一个头部域都可以看作由ASCII码字符组成的独立的文本。
常见的头部域包括:"Return-Path", "Received", "Date", "From", "Subject", "Sender","To", "cc","MIME-Version"等。
各头部域之间没有规定顺序。
就像各个域的名字一样。
他们表示的具体意义也不同。
Return-Path域表示退信的地址。
Received域表示路由信息。
Internet上的信件可能是由多个服务器依靠协议传递到达最终的目的邮箱的。
每一个服务器都会把自己的一段Received域信息添加近信件。
所以可能有多段Received域,依传递次序排列。
这个域的内容很有意思,我们可以根据每一段的内容来跟踪一封信在internet上的传递过程。
网管人员也可以根据这些信息做出很有价值的判断。
例如一段代码中Received: from unknown (unknown [202.108.44.208]) by (Postfix) with SMTP id 74E0E8 for; Fri, 28 Feb 2003 18:10:25 +0800 (CST)中,from 表示发送主机,by表示接受主机,via物理路径(本例没有),with表示使用的协议,id表示接受消息号,for表示目的邮件地址,分号后面表示时间。
Date域表示建立信件的时间。
From域表示邮件作者。
Subject域就是邮件的主题。
Sender域表示邮件的实际发送者。
To,cc域都表示接受的邮件地址。
MIME-Version域表示MIME的版本(以后扩充的域)还有一个域—Content-Type。
标识了一个重要的概念:邮件内容的格式。
这个域的内容根据互联网的发展产生,使邮件可以用来传输非文本内容,在RFC822中并没有定义,而是在后续的RFC2045,RFC2046等文档中有定义。
还有一些不太常见的头部域,如"References","Message-ID"域。
以及一些由不同厂家定义的自己的域(域名以"X-"开头)。
知道了这些知识,就可以看懂邮件头部。
了解到那些邮件的秘密。
比如这是一封邮件的头部。
Return-Path: "sea"Received: from unknown (unknown [202.108.44.208])by (Postfix) with SMTP id 74E0E8for ; Fri, 28 Feb 2003 18:10:25 +0800 (CST)Received: from (unknown [211.150.100.6])by 192.168.1.208 (Coremail:) with SMTP id cAsAAJY1Xz7kAmQG.1for ; Fri, 28 Feb 2003 18:10:30 +0800 (CST)Received: from sea (unknown [192.168.18.160])by (Postfix) with ESMTP id E55D02675Ffor ; Fri, 28 Feb 2003 18:09:58 +0800 (CST)Message-ID: <000901c2df11$2fcac090$a012a8c0@sea>From: "sea"To: "=?gb2312?B?usK6vQ==?="Message-ID: <000901c2df11$2fcac090$a012a8c0@sea>References: <000c01c2decb$9c7b7860$a012a8c0@sea><004601c2dee2$28a348c0$2400a8c0@haostation><001501c2deeb$352b34a0$a012a8c0@sea>Subject: Re: helloDate: Fri, 28 Feb 2003 18:07:22 +0800MIME-Version: 1.0Content-Type: multipart/alternative;boundary="----=_NextPart_000_0006_01C2DF54.3DDEBE50"X-Priority: 3X-MSMail-Priority: NormalX-Mailer: Microsoft Outlook Express 6.00.2600.0000X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000通过辨认就可以知道这是一封从(From域)"sea" 写给(To域)"=?gb2312?B?usK6vQ==?=" 的Id (Message-ID域)为<000901c2df11$2fcac090$a012a8c0@sea>的回信。
退信的地址(Return-Path域)是haibo.yang@netcscom可以看出(References域)这封信已经经过了连续三次回复。
主题(Subject域)是Re: hello。
时间(Date域)是2003年的3月28日。
邮件优先级(X-Priority域)是普通。
邮件的传递依次经过了三个服务器(Received域):;unknown;和。
还可以看到各服务器的协议和到达各服务器的时间。
其中Postfix和Coremail都是常见的邮件系统。
其中邮件接收地址中的内容由于包含汉字进行了编码。
一封邮件首先建立的是核心的几个域:From,To,Message-Id,Subject,Date等,在传输过程中每通过一个服务器再由此服务器在邮件头部添加一行Received信息,最后一个服务器添加退信地址(Return-Path)。
邮件头的格式制定的细节是根据信息交流和网络传输的特点制定的。
阅读它们不仅可以知道邮件传输的秘密,还可以让我们体会到协议制定与实现间的互相关联的紧密关系。
可以通过/ 查询到RFC822,同时可以查询到其它重要的RFC文档。
MX记录的应用在DNS服务器上除了可以建立主机名与IP地址的映射外,还可以建立其他多种映射,例如,建立某个主机名与其别名的映射;建立某个域名与其SMTP服务器的映射。
在DNS服务器上创建的各项映射关系称为记录,一项映射关系就是一条记录,在DNS服务器上创建的主机名与IP地址的映射关系称为A记录,主机名与别名的映射关系称为CNAME记录,域名与其SMTP服务器的映射关系称为MX记录。
在DNS服务器上为什么要建立MX记录呢?即为什么要建立域名与其SMTP服务器的映射关系呢?这与电子邮件地址的表示形式和工作原理有关。
邮件地址后缀部分表示的通常都是一个域名,而不是接收邮件的服务器的主机名,例如,邮件地址“zxx@”中的“”对应的就是一个域名。
域只是一个逻辑组合概念,它并不代表真正的计算机,对于使用某个域名作为后缀的邮件地址,外界发送给它的电子邮件必须由一台专门的SMTP服务器来进行接收和处理,接收和处理某个域的电子邮件的SMTP服务器即为该域的SMTP服务器,外界发送给某个域的电子邮件实际上都是发送给该域的SMTP服务器。
外界如何知道一个域的SMTP服务器的地址呢?这就是通过管理该域的DNS服务器上的MX记录来获得的,这也就是在DNS服务器上为什么要建立域名与其SMTP服务器的映射关系的原因。
当某台SMTP服务器要给“zxx@”发送一封电子邮件时,该SMTP服务器将根据邮件地址的后缀部分而去查询“”这个域的MX记录,得到这个域的SMTP服务器的主机名为“”,然后将邮件发送给“”这个SMTP服务器。
动手实践根据域名查询SMTP服务器Windows操作系统自带的nslookup命令可以查询一个域的MX记录。
要想知道负责接收某个电子邮箱的邮件的SMTP 服务器,可以先根据该邮件地址的后缀部分推断出其域名,然后使用nslookup命令进行查询即可。
下面以查找负责接收“zxx@”这个邮件地址的SMTP服务器的信息为例进行讲解。
启动Windows下的DOS命令行窗口,执行nslookup命令,结果如图1.16所示。
图1.16中“”表示执行nslookup命令的这台计算机当前所使用的DNS查询服务器的主机名,“211.161.46.84”则表示该DNS服务器的IP地址。
在图1.16中的“>”提示符后面先输入“set type=mx”命令,设置所要查询的记录类型为MX,然后输入域名“”,结果如图1.17所示。
图1.16 图1.17图1.17中显示了“”这个域的SMTP服务器的主机名和IP地址,其中“”为SMTP 服务器的主机名,并且该主机名对应了3个IP地址。
这说明“”为了扩充其邮件处理能力,使用了3台SMTP 服务器来接收外界发送给该域的邮件,这3台服务器的主机名都为“”,外界的SMTP服务器可以选择其中任何一台进行连接,然后将邮件发送给该服务器。