MIME协议(一) -- RFC822邮件格式
MIME协议(一) -- RFC822邮件格式 .
如同其他各种电子文档一样,电子邮件内容也必须遵循一定的格式要求,各种邮件处理程序才能从中分析和提取出发件人、收件人、主题和附件等信息。邮件内容的基本格式和具体细节分别由RFC822文档和MIME协议定义。
1 RFC822邮件格式
邮件内容的格式在RFC822文档中定义,它包括两个主要的组成部分:邮件头和邮件体。在第2章的SMTP协议的实验中,it315_test @sohu.com邮箱中接收到的it315_test@sina.com发送来的邮件的最终内容如例程3-1所示,其中的行号不属于邮件内容,是作者为了便于讲解而加上的。
例程1 test.eml
1.Return-Path: <it315_test@sina.com>
2.Delivered-To: it315_test@mx72.mail.sohu.com
3.Received: from smtp.sina.com.cn (unknown [202.108.3.177])
4. by sohumx139.sohu.com (Postfix) with SMTP id E4F9802C1249
5. for <it315_test@sohu.com>; Thu, 10 Nov 2005 16:39:50 +0800 (CST)
6.Received: (qmail 49221 invoked from network); 10 Nov 2005 08:39: 33 -0000
7.Received: from unknown (HELO it315?test) (218.246.5.151)
8. by smtp.sina.com.cn with SMTP; 10 Nov 2005 08:39:33 -0000
9. From: it315_test@sina.com
10.To: it315_test@sohu.com
11.subject:test
12.Message-Id: <20051110083950.E4F9802C1249@sohumx139.sohu.com>
13.Date: Thu, 10 Nov 2005 16:39:50 +0800 (CST)
14.Status: RO
15.X-UIDL: 1131611863.21509_77.mx72
16.
17.test!!!
例程1中的第1~15行是邮件的邮件头,第17行是邮件的邮件体,邮件头和邮件体之间以一个空行进行分隔。这封邮件的邮件体内容非常少,只有一行“test!!!”文本。邮件头部分由多个头字段和字段内容组成,各种头字段分别用于表示邮件的发件人、收件人、发件时间和主题等信息。细心的读者可能已经看到,例程1中的邮件头部分比在第2章的SMTP协议的实验中实际发送的邮件头多出了一些头字段,这些头字段是各个SMTP服务器在传递邮件的过程加上的。SMTP服务器在传递邮件时,会把一些相关信息增加到邮件的邮件头中,这种情况有点类似于现实生活中的邮局在处理邮件时,通常都会在信封上加盖邮戳一样,表示这封邮件在什么时候经过了哪个邮局和由哪个工作人员经手处理。SMTP服务器按从下往上的方式添加各个字段,即先添加的字段位于后添加的字段的下面,例如,例程1中的邮件是由sina发送给sohu的,它首先经过sina的SMTP服务器,然后经过sohu的SMTP服务器,所以,sohu的SMTP服务器添加的头字段(1~5行)位于sina的SMTP服务器添加的头字段(6~8行)的上面。另外,POP3服务器也会在邮件头中增加一些头字段,例如,例程1中的12~15行。
每一个邮件头以“字段名:字段值”的格式出现,即每一行邮件头的内容依次由字段名、冒号、空格、字段值、回车换行符组成。RFC822文档中定义了多个标准的邮件头字段,每一个邮件头字段表示一种特定的信息。邮件头中也可以包含自定义的头字段,这种自定义的头字段通常是某个组织或机构内部专用的。下面是对例程1中出现的一些主要的邮件头字段的解释:
— Return-Path 该字段代表邮件的回复地址,该字段内容由接收邮件的SMTP服务器填写,接收邮件的SMTP服务器从邮件发送程序发出的mail form命令中获得该字段内容。
— Received 该字段的基本格式为Received from A by B for C,其中A为发送方,B为接收方,C为收件人的邮箱地址。该字段的内容由接收邮件的SMTP服务器填写,常常被用来追踪邮件传输的路线和分析邮件的来源,例如,从例程1中的各个Received字段中,可以知道这封邮件的传输路径:从IP地址为【218.246.5.151】的机器上发出→【smtp.sina.com.cn】→【sohumx139.sohu.com】→【it315_test@sohu.com】。例程1中的第6行的“Received: (qmail 49221 invoked from network)”是sina的SMTP服务器内部调用的一个邮件发送模块添加的,它说明sina的SMTP服务器接收到邮件后再通过这个邮件发送模块将邮件转发出去。显然,通过分析一封邮件的源内容,是可以知道发件人的IP地址的。
— From 该字段用于指定的发件人地址,邮件阅读程序显示的发件人地址就来源于这个字段。From字段中指定的发件人地址可以随意乱写,甚至不写,所以,邮件阅读程序显示的发件人地址不一定是真实的,这通常可以通过查看邮件头中的Return-Path字段来判断发件人的真实性。注意,SMTP协议中mail from命令中指定的发件人地址也可以伪造,所以,邮件头中的Return-Path字段也不是可以完全信赖的,对于比较重要的邮件,最好还是通过电话确认一下。
— to 该字段用于指定收件人地址。
— subject 该字段用于指定邮件的主题,如果主题内容中包含有ASCII码以外的字符,通常要对其内容进行编码。
— date 该字段用于指定邮件的发送时间。
邮件头中除了包含上面的这些字段外,还有另外两个比较常用的字段:
— cc 该字段用于指定邮件的抄送地址。
— bcc 该字段用于指定邮件的暗送地址。
抄送地址和暗送地址的区别在于,邮件阅读程序通常都不显示暗送地址,而会显示抄送地址。
邮件阅读程序在显示邮件信息时,所显示出来的发件人、收件人和主题等信息就是从相应的邮件头字段中提取出来的.
MIME协议(一) -- RFC822邮件格式的更多相关文章
- MIME协议(二)
MIME协议 RFC822文档定义了邮件内容的主体结构和各种邮件头字段的详细细节,但是,它没有定义邮件体的格式,RFC822文档定义的邮件体部分通常都只能用于表述一段普通的文本,而无法表达出图片.声音 ...
- MIME协议(三) -- MIME邮件的组织结构
一封MIME邮件可以由多个不同类型的MIME消息组合而成,一个MIME消息表示邮件中的一个基本MIME资源或若干基本MIME消息的组合体.每个MIME消息的数据格式与RFC822数据格式相似,也包括头 ...
- MIME协议生成邮件
MIME协议生成一封复杂的邮件 MIME协议是对RFC822文档的升级和补充,用MIME协议能生成一封有文字.图片和附件的复杂邮件.首先要导入activation.jar和mail.jar.Mail. ...
- MIME协议(五) -- MIME邮件的编码方式
5 MIME邮件的编码方式 由于每个ASCII码字符只占用一个字节(8个bit位),且最高bit位总为0,即ASCII码字符中的有真正意义的信息只是后面的7个低bit位,而传统的SMTP协议又是基于 ...
- 杂项:MIME(多用途互联网邮件扩展类型)百科
ylbtech-杂项:MIME(多用途互联网邮件扩展类型)百科 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用 ...
- MIME协议
转:http://blog.csdn.net/flfna/article/details/5048290 MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候 ...
- MIME协议(六) -- MIME实例分析
MIME实例分析 了解MIME协议的基本组织结构后,下面用Outlook Express撰写出一封显示效果如图4所示的电子邮件,然后分析该邮件的源文件,以便读者更加深入地了解MIME协议. 1. 启动 ...
- MIME协议(四) -- MIME消息的头字段
MIME消息的头字段 4.1 Content-Type 对于表示某个具体资源的MIME消息,它的消息头中需要指定资源的数据类型:对于MIME组合消息,它的消息头中需要指定组合关系.具体资源的数据类型 ...
- 使用java语言基于SMTP协议手写邮件客户端
使用java语言基于SMTP协议手写邮件客户端 1. 说明 电子邮件是互联网上常见的应用,他是互联网早期的产品,直至今日依然受到广大用户的喜爱(在中国可能因为文化背景不同,电子邮件只在办公的时候常用) ...
随机推荐
- 使用jenkins 构建时,字体图标报错的问题。
最近一个项目开发中,我们在本地进行项目打包时,可以正常打包. 但是在使用jenkins构建时,一直报错,提示无法加载字体文件.can't resolve module '....xxxx.TTF ' ...
- Go语言GOPATH详解(Go语言工作目录)
GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录. 工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面.计算机及椅子就是你的 ...
- python+django学习三
在这个网站看https://sshwsfc.github.io/xadmin/ xadmin结果一堆的坑,文档找不到界面,dome登陆就报错permission denied for rela ...
- 使用.Net Core 2.2创建windows服务
使用.Net Core 2.2创建windows服务 我的环境 win 10 home Visual Studio 2019 v16.1.3 安装有.net core 2.2 创建项目 编辑项目文件 ...
- vue项目中导出PDF的两种方式
参考大家导出的方式,基本上是如下两种: 1.使用 html2Canvas + jsPDF 导出PDF, 这种方式什么都好,就是下载的pdf太模糊了.对要求好的pdf这种方式真是不行啊! 2.调用浏览器 ...
- Eclipse 动态添加web.xml
在创建javaweb项目时,也许会忘记让项目创建web.xml文件,这是我们可以右键创建后的项目,在javaEE Tools中选择第二个即可. Generate deployment Descript ...
- spring cloud EurekaClient 多网卡 ip 配置 和 源码分析(转)
https://blog.csdn.net/qq_30062125/article/details/83856655 1.前言对于spring cloud,各个服务实例需要注册到Eureka注册中心. ...
- easyui的combobox默认选中第一个选项
pmProjectSelect.combobox({ editable:false, width:165, url : ctx + '/PmProject/findByProjectMgr', //c ...
- @ComponentScan注解及其XML配置
开发中会经常使用包扫描,只要标注了@Controller.@Service.@Repository,@Component 注解的类会自动加入到容器中,ComponentScan有注解和xml配置两种方 ...
- 8.Spring整合Hibernate_2_声明式的事务管理(Annotation的方式)
声明式的事务管理(AOP的主要用途之一) (Annotation的方式) 1.加入annotation.xsd 2.加入txManager bean 3.<tx:annotation-drive ...