梅芳-网络编程实用教程-第9章.ppt

上传人:wuy****n92 文档编号:73428576 上传时间:2023-02-18 格式:PPT 页数:70 大小:811KB
返回 下载 相关 举报
梅芳-网络编程实用教程-第9章.ppt_第1页
第1页 / 共70页
梅芳-网络编程实用教程-第9章.ppt_第2页
第2页 / 共70页
点击查看更多>>
资源描述

《梅芳-网络编程实用教程-第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编码解码与发送附件编码解码与发送附件为了能利用

22、电子邮件传送各种信息,在RFC1341中提出了一种方法,并在RFC2045至RFC2049中作了进一步的完善,这就是多用途Internet邮件扩展(MultipurposeInternetMailExtensions),简称MIME。已经成为电子邮件的标准。按照MIME标准构造的邮件称为MIME邮件,或MIME信件,有时也称为MIME实体(MIMEentity)。MIME的基本思想是:第一,不改动SMTP和POP3等电子邮件传输协议;第二,仍然要继续使用RFC822的格式来传输邮件。图9.4MIME与电子邮件协议之间的关系 MIME主要包括三部分内容(1)扩展了可以在邮件中使用的信头字段。这些

23、新定义的信头字段说明了MIME的版本,邮件内容的类型,编码方式,以及邮件的标识和描述等信息。(2)定义了邮件信体的格式,给出了多媒体电子邮件的标准化表示方法,为信体增加了结构。而在RFC822中,对邮件信体没有作任何结构方面的规定。(3)定义了传送编码方法,可以将任何格式的内容转换为符合RFC822的ASCII文本格式。按照MIME规范,可以构造复杂的邮件,发送附件就是利用MIME实现的。9.4.2 MIME定义的新的信头字段定义的新的信头字段MIME定义了5个新的信头字段,可以与原有信头字段一样,用在RF822邮件的首部中。1MIME版本信头字段版本信头字段格式:MIME-Version:1

24、.0此字段用于标识使用的MIME版本号,目前MIME只有1.0版。如果是MIME邮件,就必须有MIME版本信头字段;如无此行,则说明邮件是原来那种RFC822的英文文本。设置这个字段是为了将来出现更高的MIME版本号时,解决发送、接收软件双方的兼容性问题。2邮件唯一标识信头字段邮件唯一标识信头字段格式:Content-ID:唯一标识信件的字符串 此字段提供一种唯一标识MIME实体的方法,与Message-ID信头字段类似。借助这个唯一标识,可以实现在一个MIME实体中引用其他的MIME实体。如果邮件的内容类型是Message/External-body,就需要使用此字段;对于其他类型,这个字段

25、是可选的。3邮件内容描述信头字段邮件内容描述信头字段格式:Content-Description:描述文本描述文本是可读的字符串,简要说明MIME邮件的内容或主题,收信人可以据此决定是否值得解码和阅读该邮件。4MIME邮件的内容类型信头字段邮件的内容类型信头字段格式:Content-Type:主类别标识符/子类别标识符;参数列表例如:Content-Type:Text/Plain;Charset=“gb2312”此字段说明特定的MIME实体中所包含数据的类型,类型不同,邮件体的内部结构也随之不同。它也说明了邮件的性质,是MIME中的主要字段,在节中详述。5内容传送编码方式信头字段内容传送编码方

26、式信头字段格式:Content-Transfer-Encoding:编码方式标识符指定在传送邮件时,如何对邮件的主体进行编码。在节中详述。9.4.3 MIME邮件的内容类型邮件的内容类型1概述概述Content-Type是MIME对RFC822扩展的最主要的信头字段,用于指定MIME邮件内容的类型,包含丰富的信息。Content-Type信头字段的目的是充分地描述包含在信体中的数据,使得接收用户代理能够选择适当的代理或机制来将这些数据呈现给用户,或者,用正确的方法处理这些数据。这个字段的值叫做媒体类型(mediatype)。本节对这个字段进行详细的说明。它的一般格式是:Content-Type

27、:邮件内容媒体主类型名/子类型名;参数列表 这个字段由三部分组成,第一部分是关键字第二部分是邮件内容媒体主类型名(mediatypeidentifiers)和子类型名(subtypeidentifiers),说明邮件内容的媒体类型第三部分,是一个以分号隔开的参数列表,格式是:;参数名=参数值;参数名=参数值;.例如,Content-Type:text/HTML;charset=“GB2312”在RFC2046中定义了7个基本的内容主类型(top-levelmediatypes),每一种都有一个或多个子类型,共计15个子类型,表9.1列出了它们的标识符,表9.1 RFC2046中定义的邮件内容类

28、型和子类型主类型标识符子类型标识符说明Textplain不包含格式化信息的无格式化文本enrich包含简单格式化标记的文本ImagegifGIF格式的图像jpegJPEG格式的图像Audiobasic用PCM(脉码调制)获得的音频数据VideompegMPEG格式的影片Applicationoctet-stream不加解释的不间断的字节序列postscriptPostScript格式的可打印文档Messagerfc822MIME RFC822邮件partial为了传输而讲一个邮件分成几个external-body必须从其它地方获取邮件的内容Multipartmixed按照特定顺序的几个独立不发

29、alternative不同格式的同一邮件parallel必须同时读取的几个不发digest每一个不发是一个完整的RFC822邮件2Text媒体类型媒体类型3image媒体类型媒体类型4Audio媒体类型媒体类型5Video媒体类型媒体类型6Application媒体类型媒体类型7Message媒体类型媒体类型8Message/external-body媒体类型的参数及使用媒体类型的参数及使用9Multipart媒体类型媒体类型9.4.4 MIME邮件的编码方式邮件的编码方式1MIME编码概述编码概述(1)7bit编码方式Content-Transfer-Encoding:7bit(2)8bit

30、编码方式Content-Transfer-Encoding:8bit(3)binary编码方式Content-Transfer-Encoding:binary(4)Base64编码方式(5)Quoted-printable编码方式 2BASE64编码算法编码算法在进行Base64的编码时,首先要将被编码的数据看成一个字节序列,不分行。然后按照以下三个步骤反复进行编码。第一步:顺次从要编码的字节序列数据中,取出3个字节,作为一组,该组包含24bit。第二步:将一组的24个bit,再顺次分为四个6bit的小组。并在每小组的前面补两个零,形成四个字节。显然这4个字节的值都在0-63范围内。第三步:根

31、据小组的每个字节的数值,按照表9.2的对应关系,将它们分别转换为对应的可打印ASCII字符。顺次对要编码的数据字节序列,重复进行以上处理,直到所有的数据编码完成为止。值 字符值 字符 值 字符值 字符 值 字符值 字符0A 11 L22 W33 h 44 s55 31B 12 M23 X34 i45 t56 42C 13 N24 Y 35 j46 u57 53D 14 O25 Z36 k 47 v58 64E 15 P26 a37 l48 w59 75F 16 Q27 b38 m 49 x60 86G 17 R28 c39 n 50 y61 97H 18 S29 d40 o 51 z62 +8

32、I 19 T30 e41 p 52 063 /9J 20 U31 f42 q 53 110 K21 V32 g43 r54 2表9.2 Base64编码此外,编码过程中还需要注意两点:(1)如何将编码后的文本行控制在76个字符以内?按照RFC822的要求,应当将编码后的文本行控制在76个字符以内。这只需要在编码后的字符序列中,每76个字符插入一组CRLF(回车换行),然后就可以发送,在接受端译码时,应首先将碰到的CRLF符删除,再按照Base64的方法译码。在原来要编码的数据中可能有CR(0A)和LF(0D)字符,但它们经过编码后,变成了“K”和“N”,不会与后来插入的CRLF字符相混。(2)

33、编码时最后一组不满三个字节怎么办?Base64编码时,按照三个字节一组进行,最后一组就有可能剩下1个或2个字节。编码时,一方面对有效的数据要进行编码,另一方面要让接收端能判断出最后一组剩下的有效数据究竟有几个字节。方法是:首先补充全零的填充字节,将最后一组补够3个字节,然后按照上述方法进行编码,在第三步映射成字符后,要将编码后的末尾一个或两个字节替换为“=”字符。如果最后一组只剩一个数据字节,那么产生的4个编码数据中,只有前两个带有剩余数据字节的位,就应将4个编码数据的后两个字节都替换成等号。如果最后一组剩下两个字节,那么产生的4个编码数据中,前三个带有剩余数据字节的位,这时就将4个编码数据的

34、最后一个字节替换成等号。注意到,等号并不包含在上面的转换表中,接收端根据等号的数目,就可以判知最后一组中有效的字节数,从而正确地译码。3Quoted-printable编码算法编码算法这 种 编 码 称 为 可 打 印 的 引 用 编 码(Quoted-printableencoding),被编码的数据以8BIT的字节为单位,这种编码方法的要点就是对于所有可打印的ASCII码,除了特殊符号“=”以外,都不改变。编码算法的要点是:(1)如果被编码数据字节的值在33到60之间(字符!至字符至字符),这部分字符是可打印的,则该数据字节编码为7bit的对应ASCII字符,实际就是将最高位去掉。(2)其

35、他的数据,包括“=”字符,空格,ASCII码在0-32的不可打印字符,以及非ASCII码的数据,都必须进行编码。被编码的数据以8bit的字节为单位,先将每个字节的二进制代码用两个16进制数字表示,然后在前面加上一个等号“=”,就是该字节的编码。例如,字节值12被编码为“=0C”,字节值61被编码为“=3D”。再比如,汉字“系统”的二进制代码是:11001111101101011100110110110011,其16进制数字表示为:CFB5CDB3,相应的Quoted-printable编码表示为:=CF=B5=CD=B3。等号的二进制代码是00111101,它的Quoted-printable

36、编码是=3D。回车符被编码为=0D,换行符被编码为=0A。要注意,16进制数据的表示用字母表“0123456789ABCDEF”,即必须用大写字母。(3)如果要将编码后的数据分割成76字符的行,可以在分割处插入等号“=”和CRLF。此等号也要计算在76个字符中。例如,ABCDEFGHEJKLMNOPQRSTUVWXYZ经过编码后将此行变成较短的形式:ABCDEFG=HEJKLMNOPQRSTUV=WXYZ容易看出,接收端只要将插入的分割字符删掉,就很容易将它们恢复成原来的样子。9.5 POP3与接收电子邮件与接收电子邮件9.5.1 POP3协议协议用来接收电子邮件的POP邮局协议最初是在198

37、4年发表的RFC918中定义的,1985年的RFC937发表了它的第二个版本。随着POP协议的广泛使用,1988年的RFC1081又发表了它的第三版本,简称POP3,这个版本又在RFC1225,RFC1460,RFC1725,RFC1939中几经修订,其中RFC1939是当前的POP3标准。9.5.2 POP3的会话过程的会话过程 图9.5POP3会话 POP也使用客户/服务器工作模式,在接收邮件的用户的PC机中,运行POP客户程序,在用户所连接的ISP的邮件服务器中,运行POP服务程序,二者之间按照POP协议相互发送信息,POP客户发送给POP服务器的消息称为POP命令,POP服务器返回的消

38、息称为POP响应。交互的过程称为POP会话。例如:(ConnecttothePOP3Server.)/首先连接到POP3服务器S:+OKPOP3serverready/服务器已经准备好C:USERWang/用户名是Wang S:+OKC:PASSvegetables/口令是vegetablesS:+OKloginsuccessful/客户登录成功了C:LIST/请列出信箱中的信件清单S:1AAAA/第一封信S:2BBBB/第二封信S:3CCCC/第三封信C:RETR1/取回第一封信S:+OK(sendmessage1)/好,(发送第一封信)C:DELE1/删除第一封信S:+OK/好的C:RET

39、R2S:+OK(sendmessage2)C:DELE2S:+OKC:QUIT/结束会话,再见S:+OKPOP3serverdisconnecting/好,POP3服务器断开连接 在上面的对话过程中,C:后面是接收邮件的客户端软件发送的命令,S:后面是POP服务器的应答,/后面是注释。从这个例子中可以看出POP会话的特点:会话采用交互的请求应答模式,会话过程通过相互发送文本来完成。客户发送的文本命令也采用命令字参数的形式。服务器对于客户的命令总是返回一定的响应码,表示客户端的请求是否被正确处理。会话过程所发送的命令有一定的顺序 9.5.3 POP3会话的三个状态会话的三个状态POP3会话一共有

40、3个状态:验证状态,事务状态和更新状态。每个状态都是会话过程中的特定阶段。当连接服务器后,POP3会话首先进入验证状态,在这个阶段里,可以使用USERPassQuit这三个POP3命令,客户段送交用户名和口令,服务器验证是否合法。通过服务器验证后,服务器锁定该用户的信箱,从而防止多个POP客户端同时对此邮箱进行邮件操作,比如删除,取信等。但是可以让新的邮件加入。这时会话过程转变为事务状态,在事务状态客户端可用的POP3命令有:NoopStatQuitListRetrTopDeleRsetUidl。使用这些命令进行各种邮件操作,POP对话的大部分时间都处在事务状态中。当客户发出Quit命令后,结

41、束事务状态,POP会话过程进入更新状态。在事务状态进行的一些操作,最终在更新状态中才得以体现。比如在事务状态使用Dele命令删除邮件,实际服务器并没有将邮件删除,只是做了一个删除标志;到了会话过程的更新状态,邮件才被删除。更新状态只是会话中的一个过程,该状态没有可使用的命令,目的是用户在事务状态后用以确认已经进行的操作。在进入该状态后,紧接着就完成了POP3的会话过程,断开了与服务器的连接。要注意,由于异常原因导致的与服务器终止对话并没有进入更新状态。在事务状态删除的邮件没有被删除,下次进入信箱时邮件还是存在的。9.5.4 POP3标准命令标准命令表9.3常用的POP3命令 命令说明USER给

42、出登录验证的用户名PASS给出登录验证的口令APOP转换验证机制NOOP空操作STAT命令服务器提供信箱大小的信息LIST命令服务器提供信箱大小的信息RETR从服务器取回信件TOP取出信头和邮件的前N行DELE为邮件作删除标记。RSET复位POP会话UIDL取出邮件的唯一标识符9.5.5 接收电子邮件的一般步骤接收电子邮件的一般步骤首先利用Winsock连接上POP3服务器,然后:1使用使用USER命令发送用户信箱名。命令发送用户信箱名。2使使用用PASS命命令令发发送送信信箱箱密密码码。如如果果密密码码和和信信箱箱不不匹匹配配,必须从上一步骤重新开始。必须从上一步骤重新开始。3对信箱邮件进行操作。对信箱邮件进行操作。此阶段称为事务状态,在这一个阶段,有许多POP3命令可以使用,大体分为下面几类:(1)取得信箱及邮件状态的命令Stat:取得信箱大小信息List:取得邮件大小信息Uidl:取得邮件的唯一标识符。(2)取得邮件内容的命令Retr:从服务器取回邮件TOP:取邮件信头和信体的前N行。(3)对邮件进行操作的命令Dele:为邮件做删除标记。Rset:复位POP会话。4接收邮件完毕,发送接收邮件完毕,发送QUIT命令,结束命令,结束POP3对话。对话。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com