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协议则是用于在邮件中传输非文本内容(如图片、音频、视频等)的协议。
总的来说,电子邮件的传输协议是一个复杂而完善的系统,它通过一系列的协议和技术保证了电子邮件的可靠传输和安全性。
mime协议MIME 协议。
MIME(Multipurpose Internet Mail Extensions)是一种互联网标准,最初是为了解决电子邮件中的多媒体文件传输问题而设计的。
随着互联网的发展,MIME 协议已经被广泛应用于 Web 页面的传输、HTTP 协议中的数据交换、以及其他许多互联网应用中。
本文将介绍 MIME 协议的基本概念、作用和应用,以及在实际开发中的一些注意事项。
MIME 协议的基本概念。
MIME 协议是一种在互联网上传输多媒体文件的标准。
它通过在数据中添加一些描述性的信息(例如文件类型、编码方式等),使得接收方能够准确地识别和处理这些文件。
MIME 协议最初是为了解决电子邮件中的附件传输问题而设计的,但它的作用并不仅限于此,它也被广泛应用于 Web 页面的传输、HTTP 协议中的数据交换等方面。
MIME 协议的作用和应用。
MIME 协议的主要作用是在互联网上传输多媒体文件。
它通过在数据中添加一些描述性的信息,使得接收方能够准确地识别和处理这些文件。
MIME 协议定义了一种通用的文件格式描述方式,可以描述几乎所有类型的文件,包括文本、图像、音频、视频等。
这使得互联网上的不同应用能够以统一的方式处理各种类型的文件,极大地提高了文件传输的效率和可靠性。
在实际开发中的注意事项。
在实际开发中,开发人员需要注意以下几点:1.正确设置 MIME 类型,在开发 Web 页面或者其他互联网应用时,开发人员需要正确地设置文件的 MIME 类型。
这样可以确保浏览器或者其他客户端能够正确地识别和处理这些文件,从而提供更好的用户体验。
2.处理文件编码,在传输文件时,开发人员需要正确地处理文件的编码方式。
不同的文件可能需要使用不同的编码方式,开发人员需要根据文件的类型和具体要求来选择合适的编码方式。
3.处理文件的安全性,在接收和处理文件时,开发人员需要注意文件的安全性。
特别是在处理用户上传的文件时,开发人员需要进行严格的文件类型和内容检查,以防止恶意文件的传输和执行。
MIME协议简介MIME的编码介绍(base64)及使⽤的意义三MIME的头信息邮件头在邮件头中,有很多从RFC 822沿⽤的域名,MIME也增加了⼀些。
常见的标准域名和含义如下:域名含义添加者Received 传输路径各级邮件服务器Return-Path 回复地址⽬标邮件服务器Delivered-To 发送地址⽬标邮件服务器Reply-To 回复地址邮件的创建者From 发件⼈地址邮件的创建者To 收件⼈地址邮件的创建者Cc 抄送地址邮件的创建者Bcc 暗送地址邮件的创建者Date ⽇期和时间邮件的创建者Subject 主题邮件的创建者Message-ID 消息ID 邮件的创建者MIME-Version MIME版本邮件的创建者Content-Type 内容的类型邮件的创建者Content-Transfer-Encoding 内容的传输编码⽅式邮件的创建者⾮标准的、⾃定义域名都以X-开头,例如X-Mailer, X-MSMail-Priority等,通常在接收和发送邮件的是同⼀程序时才能理解它们的意义。
段头在段头中,⼤致有如下⼀些域:域名含义Content-Type 段体的类型Content-Transfer-Encoding 段体的传输编码⽅式Content-Disposition 段体的安排⽅式Content-ID 段体的IDContent-Location 段体的位置(路径)Content-Base 段体的基位置有的域除了值之外,还带有参数。
值与参数、参数与参数之间以“;”分隔。
参数名与参数值之间以“=”分隔。
1.MIME-Version 表⽰使⽤的MIME的版本号,⼀般是1.0;如:MIME-Version: 1.02.Content-TypeContent-Type定义了正⽂的类型,我们实际上是通过这个标识来知道正⽂内是什么类型的⽂件。
⽐如:text/plain 表⽰的是⽆格式的⽂本正⽂,text/html 表⽰的 Html ⽂档,image/gif 表⽰的是 gif 格式的图⽚等等。
电⼦邮件收发协议总结说明:本⽂仅供学习交流,转载请标明出处,欢迎转载!电⼦邮件发送协议是⼀种基于“推”的协议,主要包括SMTP;邮件接收协议则是⼀种基于“拉”的协议,主要包括POP协议和IMAP协议,在正式介绍这些协议之前,我们先给出邮件收发的体系结构:从上图可以看出邮件收发的整个过程⼤致如下:(1)发件⼈调⽤PC机中的⽤户代理编辑要发送的邮件。
(2)发件⼈点击屏幕上的”发送邮件“按钮,把发送邮件的⼯作全部交给⽤户代理来完成。
⽤户代理通过SMTP协议将邮件发送给发送⽅的邮件服务器(在这个过程中,⽤户代理充当SMTP客户,⽽发送⽅的邮件服务器则充当SMTP服务器)。
(3)发送⽅的邮件服务器收到⽤户代理发来的邮件后,就把收到的邮件临时存放在邮件缓存队列中,等待时间成熟的时候再发送到接收⽅的邮件服务器(等待时间的长短取决于邮件服务器的处理能⼒和队列中待发送的信件的数量)。
(4)若现在时机成熟了,发送⽅的邮件服务器则向接收⽅的邮件服务器发送邮件缓存中的邮件。
在发送邮件之前,发送⽅的邮件服务器的SMTP 客户与接收⽅的邮件服务器的SMTP服务器需要事先建⽴TCP连接,之后再将队列中的邮件发送出去。
值得注意的是,邮件不会在因特⽹中的某个中间邮件服务器落地。
(5)接收邮件服务器中的SMTP服务器进程在收到邮件后,把邮件放⼊收件⼈的⽤户邮箱中,等待收件⼈进⾏读取。
(6)收件⼈在打算收信时,就运⾏PC机中的⽤户代理,使⽤POP3(或IMAP)协议读取发送给⾃⼰的邮件。
注意,在这个过程中,收件⼈是POP3客户,⽽接收邮件服务器则是POP3客户,箭头的⽅向是从邮件服务器指向接收⽤户,因为这是⼀个“拉”的操作。
下⾯我们根据上⾯的总体过程介绍下各个组件。
⽤户代理⽤户代理UA(User Agent)是⼀个软件包(程序),它的功能是:撰写、阅读、回复和转发报⽂,还能处理邮箱(如创建收信箱和发信箱)。
共有两种类型的⽤户代理:命令驱动和GUI。
A.0、MIMEMultipurpose Internet Mail Extension(多功能Internet 邮件扩充服务)它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。
服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。
服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。
MIME能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。
这个标准被定义在; RFC 2045,; RFC 2046,; RFC 2047,; RFC 2048,; RFC 2049等RFC中。
由RFC 822转变而来的RFC 2822,规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集以外的字符。
正因如此,一些非英语字符消息和二进制文件,图像,声音等非文字消息都不能在电子邮件中传输。
MIME规定了用于表示各种各样的数据类型的符号化方法。
MIME意为多功能Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。
然而当它被HTTP协议支持之后,它的意义就更为显著了。
它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。
由于MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的MIME类型,服务器中必须定义文档后缀和MIME类型之间的对应关系。
而客户程序从服务器上接收数据的时候,它只是从服务器接受数据流,并不了解文档的名字,因此服务器必须使用附加信息来告诉客户程序数据的MIME类型。
服务器在发送真正的数据之前,就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定义,例如对于HTML文档,服务器将首先发送以下(Content-type: text/html)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服务器可以选择其中任何一台进行连接,然后将邮件发送给该服务器。