梅芳-网络编程实用教程-第9章.ppt
《梅芳-网络编程实用教程-第9章.ppt》由会员分享,可在线阅读,更多相关《梅芳-网络编程实用教程-第9章.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第9章章 电子邮件协议与编程电子邮件协议与编程本章首先介绍电子邮件系统的构成和工作原理,然后分析简单邮件传送协议SMTP,接着叙述RFC822规定的纯文本电子邮件信件的格式,详细说明了MIME多媒体邮件格式扩展,分析了接收电子邮件的POP3邮局协议,最后给出了两个编程实例。通过本章的学习,应当充分认识应用层协议在网络编程中的重要性,可以说,网络编程就是应用层协议的实现。9.1 电子邮件系统的工作原理电子邮件系统的工作原理9.1.1 电子邮件的特点电子邮件的特点电子邮件(electronicmail,简称e-mail)是因特网上使用最多的一种应用,它为用户在因特网上设立了存放邮件的电子邮箱,发
2、信人可以随时将电子邮件发送到收信人的电子邮箱,收信人也可以随时上网读取,发信人与收信人以异步的方式通信。9.1.2 电子邮件系统的构成电子邮件系统的构成一个电子邮件系统包括三个主要的构件,即用户代理,邮件消息传输代理,和电子邮件使用的协议。如图9.1所示:图9.1电子邮件系统的构成 9.1.3 电子邮件系统的实现电子邮件系统的实现 图9.2电子邮件的发送与接收过程 从以上的分析可以了解电子邮件系统的特点:是一种异步的通信系统,不像电话,通话的双方都必须在场。使用方便,传输迅速,费用低廉,不仅能传输文字信息,还能附上声音和图像。在电子邮件系统的实现中,ISP的服务器必须7X24小时地不间断地运行
3、,这样才能保证用户可以随时发送和接收信件,而发送或接收电子邮件的用户则随意。9.2 简单邮件传送协议简单邮件传送协议SMTP9.2.1 概述概述简单邮件传送协议SMTP(SimpleMailTransferProtocol)是因特网的正式标准,最初在1982年由RFC821规定,目前它的最高版本是RFC2821。SMTP协议采用C/S模式,专用于电子邮件的发送,规定了发信人把邮件发送到收信人的电子邮箱的全过程中,SMTP客户与SMTP服务器这两个相互通信的进程之间应如何交换信息。即规定了SMTP的会话过程。用户直接使用的是用于编写和发送的客户端软件,而通常的SMTP服务器运行在远程站点上。客户
4、/服务器之间的通信是通过TCP/IP协议进行的。9.2.2 SMTP客户与客户与SMTP服务器之间的会话服务器之间的会话1SMTP会话会话如图9.3,说明了SMTP客户与SMTP服务器之间的会话 图9.3SMTP客户与SMTP服务器之间的会话 2SMTP命令命令一般是客户主动,首先发送。SMTP客户发往SMTP服务器的信息称为SMTP命令。在RFC821中,SMTP协议规定了14种命令。SMTP命令的一般的格式是:命令关键字参数其中,命令关键字一般是四个字母,是一个英文动词的缩写。参数随命令而异,命令应当以回车换行符结束。比如HELOWANG 3SMTP应答应答SMTP服务器收到命令后,返回给
5、SMTP客户的信息,称为SMTP应答。客户每次发送一条SMTP命令后,服务器给客户返回一条响应。SMTP规定了23种响应码。SMTP应答都是以一个响应码开头,后面接着响应的描述信息,如果SMTP服务器不一样,响应的描述信息可能不一样,SMTP应答的一般格式是:响应码响应的文本描述信息其中,响应码为3位数字,与描述信息文本之间有一个空格,9.2.3 常用的常用的SMTP命令命令1SMTP客户问候客户问候SMTP服务器服务器命令格式:HELO发送方的主机名2邮件来自何处,说明发信人的电子邮件地址邮件来自何处,说明发信人的电子邮件地址命令格式:MAIL FROM:发信人的电子邮件地址3说明收信人的电
6、子邮件地址说明收信人的电子邮件地址命令格式:RCPTTO:收信人的电子邮箱地址4请求发送邮件内容请求发送邮件内容命令格式:DATA 5空操作空操作命令格式:NOOP6验证电子信箱是否合法验证电子信箱是否合法命令格式:VRFY电子信箱地址7复位复位SMTP服务器服务器命令格式:RSET8请求服务器发回帮助信息请求服务器发回帮助信息命令格式:HELP或者HELP命令关键字9退出会话退出会话命令格式:QUIT9.2.4 常用的常用的SMTP响应码响应码211系统状态或系统帮助应答。214帮助信息220服务就绪。221服务器关闭传输通道。250请求的邮件操作已经完成。251 用户不是本地的,将按照前向
7、路径(forwaed-path)转发。354启动邮件输入,要求邮件文本要用两个结束。421服务不可使用,关闭传输通道。450没有执行请求的邮箱操作,因为信箱不可用。451请求的操作已经终止,因为在处理的过程中出现了错误。452请求的操作没有发生,因为系统的存储空间不够,500语法错误,命令不可识别。501参数或变元中存在着语法错误。502命令不能实现。503错误的命令序列504命令的参数不能实现。550请求的操作不能发生,信箱不可用。551用户不在本地,请尝试发送到前向路径(forwaed-path)。552请求的邮件操作终止,超出存储分配。553请求的操作不能执行,因为信箱语法错误。554事
8、务失败。9.2.5 SMTP的会话过程的会话过程SMTP客户与SMTP服务器的会话过程分为三个阶段,先举例说明。以下每行前面的C代表SMTP客户发送的命令,S代表服务器发回的响应。每行/后面的内容是注释。C:HELO YE/你好!我是YE。S:,nicetomeetyou/你好!YE,很高兴见到你,有事吗?C:MAIL FROM:/我想发信,我的地址是。S:250,Sender,accepted/行!有信你就发吧。/我的信要发给。C:/行!已经准备好。S:250,RecipientokC:DATA/我要发信件的内容了。/发吧!结尾标志是两个回车换行符夹个英文句点。S:354Entermail,
9、endwith.C:(客户端按照电子邮件的格式发送邮件内容)/我的信已经发完了C:(邮件内容发送完毕,发送结束标志crlf&.&crlf)/好的,你的信已经存储了。S:250ok,messagesavedC:QUIT/再见S:221Seeyouincyberspace/再见 在上面的对话过程中,粗体字部分是发送邮件的客户端软件发送的内容,其他部分是SMTP服务器的应答内容。从中可以明显看出SMTP会话具有以下特点:(1)会话的过程采用交互式的请求应答模式,客户发送命令,服务器回送应答。(2)客户发送的命令和服务器回送的应答都是纯文本形式,有一定格式。(3)针对客户的每个命令,服务器总要返回一定
10、的响应码,表示服务器是否接受或执行了客户端命令。(4)会话过程有一定的顺序 9.2.6 使使用用Winsock来来实实现现电电子子邮邮件件客客户户与与服服务务器的会话器的会话(1)启动SMTP服务器,在指定的传输层端口监听客户端的连接请求,为SMTP服务器保留的端口是25。(2)客户端设置Winsock连接的IP地址或域名,指定端口号,主动发出连接请求,连接到SMTP服务器。比如,网易的SMTP服务器的域名是,监听端口是25。(3)服务器接收客户端的连接请求,并发回响应。客户端应收到类似220BigFoxESMTPserviceready这样的信息,这就说明客户端已经与服务器建立TCP/IP连
11、接,成功地实现了第一步。(4)客户端和服务器分别向对方发送数据。(5)客户端或服务器分别读取自己缓冲区中的数据。(6)以上两步是SMTP会话的主要部分,要按照SMTP协议的规定,按照一定顺序,客户向服务器发送命令,服务器向客户发送应答,以上两步要多次重复。(7)会话完毕,关闭客户端和服务器之间的连接。9.3 电子邮件信件结构详述电子邮件信件结构详述9.3.1 Internet文本信件的格式标准文本信件的格式标准-RFC822在电子邮件系统的环境中,电子邮件信件是它传递的对象。最早规定电子邮件信件内容结构的标准是在1982发表的,称作RFC822,至今它仍然是Internet上电子邮件信件的当前
12、标准。RFC822定义了信件从主机传递到主机时需要的格式化方式。它的主要用途是为信件提供规范化的格式,使不同类型的网络可以相互传递电子邮件。该标准的最新文本是RFC2822。RFC822规定,电子邮件信件的内容全部由ASCII字符组成,就是通常所说的文本文件,从组织上看,RFC822将信件内容结构分为信头和信体两大部分,中间用一个空白行。对于一行的字符数,有一个1000/80的限制规则。对于信件的行数,RFC822没有特别的限制,下面是一个电子邮件信件内容文本的实例,可以大致说明头部行的形式,头部的行由关键字和冒号开始,头部和正文部分由空行分隔开。From:Date:Fri,1Jan9910:
13、21:32ESTSubject:lunchwithme?BobCanwegettogetherforlunchwhenyouvisitnextweek?ImfreeOnTuesdayorWednesdayjustletmeknowwhichdaywouldprefer.john9.3.2 信件的头部信件的头部1信头的一般格式信头的一般格式信头由若干信头字段(headerfield)组成。所有的信头字段包括四部分,字段名(fieldname),紧跟冒号:(colon),后跟字段体(fieldbody),最后以回车换行符(CRLF)终止。即信头字段=字段名:字段体 2结构化字段和非结构化字段结构化
14、字段和非结构化字段信头字段大体可以分为结构化字段和非结构化字段两种。结构化字段有特定的格式,由语法分析程序检测。非结构化的字段含有任意的数据,没有固定格式。3信头字段的元素信头字段的元素尽管Email信件的总体结构非常简单,但一些信头字段的结构是很复杂的。下面介绍一些大多数字段共有的元素。(1)空白符(2)注解(3)字段折叠(4)字段大小写 4标准的信头字段标准的信头字段(1)与发信方有关的信头字段写信人字段说明信件的原始创建者,给出他的电子信箱地址。创建者对信件的原始内容负责。格式:From:mailbox举例:From: 发送者字段说明实际提交发送这个信件的人,给出他的电子信箱地址。当发信
15、人与写信人不一样时使用。比如,秘书替经理发信。发送者对发送负责。格式:Sender:mailbox举例:From:Sender:回复字段指定应当把回信发到哪里。如果有此字段,回信将会发给它指定的邮箱,而不会发给From字段指定的邮箱。比如,发送的是经理的信,但回信应交办公室处理。格式:Reply-TO:mailbox举例:From:Reply-TO:(2)与收信方有关的信头字段收信人字段指定主要收信人的邮箱地址,可以是多个邮箱地址的列表,地址中间用逗号隔开。格式:TO:mailboxlist举例:TO: 抄送字段指定此信件要同时发给哪些人,也称为抄送。也可以使用邮箱地址列表,抄送给多个人。格式
16、:Cc:mailboxlist举例:Cc:密抄字段指定此信件要同时秘密发给哪些人,也称为密件抄送。也可以使用邮箱地址列表,密抄给多个人。格式:Bcc:mailboxlist(3)其它的信头字段日期字段Date字段含有电子邮件创建的日期和时间。格式:Date:date-time举例:Date:Tue,04 Dec 2004 16:18:08+800 信件主题字段描述信件的主题。当回复信件时,通常在主题前面增加“Re:”前缀,标记为该信件为回复信件:当信件被转发时,通常在主题文字前面加上“Fw:”,“Fwd:”这样的前缀。格式:Subject:*text举例:Subject:Hello!Subje
17、ct:Re:Hello!接受字段是投递信件的特定邮件服务器所作的记录。处理邮件投递的每个服务器必须给它处理的每个信头的前面加一个Received字段,用以描述信件到达目的地所经过的路径以及相关信息。当跟踪各个电子邮件问题时,这个信息很有帮助。格式:Received:fromdomain/发送主机bydomain/接收主机viaatom/物理路径idmsg-id/接收者msgid举例:Received:fromwang195.0.0.1byli129.5.0.4Tuedec200312:18:02+800 注释字段用于把一个注解添加到信件中。格式:Comments:*text重发字段当需要把收到
18、的信件重发给另一组收信人的时候,可以保持整个原始信件不变,并简单地产生重发信件所要求的新信头字段。为避免与以前的字段相混。新添加的信头字段都加上Resent-前缀字符串,它们的语法与未加前缀的同名字段相同。格式:Resent-*举例:Resent-FromResent-SenderResent-dateResent-Reply-To信件标识字段用于表示一个信件唯一标识,该字段通常有Smtp服务器生成,这个值通常是唯一的。形式根据使用的软件而定。通常左边是标识符,右边指定计算机名。格式:Message-ID:msg-id 5扩展的信头字段扩展的信头字段如果想在信头中加入RFC822中没有规定的字
19、段,就需要创建非标准字段。方法非常简单,只要在自定义的信头字段名的前面使用X-前缀。RFC822将这种方法称为扩展字段。事实上已经有许多扩展字段被广泛应用,但没有标准定义。例如:X-LOOP字段X-Mailer字段 6信头中必须要有的字段信头中必须要有的字段在创建信件时,必须使用Date或Resent-Date字段指定创建信件的日期,必须使用From字段指定创建该信件的人或程序的信箱,必须至少使用TO、CC或Bcc中的一个,或者与它们等效的Resent-TO,Resent-CC,Resent-Bcc中的一个,来指定接收信件的人。除了这些创建信件时要求的信头以外,每个处理信件的邮件传输代理(MT
20、A)必须在它处理的信件头部开始处加一个Received字段,就好像打了一个中转邮戳,这就是我们通常在许多信件的开始看到许多个Received字段的原因。9.3.3 构造和分析符合构造和分析符合RFC822标准的电子信件标准的电子信件1信件的构造信件的构造发送电子邮件的程序要进行电子信件的构造。信件主要分为两大部分:信头和信体,在两部分之间用空白行隔开。先构造信头,信头的必需字段有:一个Date字段,一个From字段,最少一个收信人字段。也可以根据需要加入其它的字段。信体部分比较简单,按照文本文件的方法编写就行。对于较长的信头字段或信体行,可以使用折叠的方法,把它们变为80字符以内的行。2信件的
21、语法分析信件的语法分析接收邮件的程序要对邮件进行结构和语法分析。信件的语法分析是构造信件的逆过程,通过分析,从中提取必要的信息,使用户最终看到的不是软件接收下来的原始信件,而是经过处理的有条理的信件内容。一般首先将存在折叠的字段展开,将跨多行的字段去掉折叠字符合成一个完整的字段,并在信头中与其它字段分隔开来。去掉折叠的方法是将续行上面一行末尾的CFLF符替换成空格符。其次对字段进行处理,将字段头和字段体分离开。然后显示相关字段的内容。最后提取信件的正文内容。信件体和信头之间以空白行分开,根据这个特点可以很容易地将信头和信体区分开来。9.4 MIME编码解码与发送附件编码解码与发送附件为了能利用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 梅芳 网络 编程 实用教程
限制150内