POP3设计论文.docx
- 文档编号:6970044
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:29
- 大小:223.10KB
POP3设计论文.docx
《POP3设计论文.docx》由会员分享,可在线阅读,更多相关《POP3设计论文.docx(29页珍藏版)》请在冰豆网上搜索。
POP3设计论文
课外设计论文
题目
基于POP3协议的电子邮件接收程序的设计
教学院
专业
班级
姓名
指导教师
2010
年
6
月
22
日
一电子邮件的发展背景和意义
电子邮件翻译自英文的E-mail,它表示通过电子通讯系统进行信件的书写、发送和接收。
30多年前,人们发明了电子邮件这种便捷的信息传递方式,这是人类通信历史上的一次革命。
电子邮件的兴起是在20世纪80年代,70年代的沉寂主要是因为当时使用Arpanet网络的人太少,网络的速度也仅为目前56Kbps标准速度的二十分之一。
受网络速度的限制,那时的用户只能发送些简单的信息,根本无法象现在这样发送大量照片;到80年代中期,个人电脑兴起,电子邮件开始在电脑迷以及大学生中广泛传播开来;到90年代中期,随着计算机技术的发展,出现了功能强大的Internet。
在Internet众多的服务功能中,电子邮件E-mail就是其强大功能中的一个。
自此,电子邮件被广为使用。
今天使用的最多的通讯系常低廉的价格,以非常快速的方式,与世界上任何一个角落的网络用户联络系,这些电子邮件可以是文字、图象、声音等各种方式。
同时,您可以得到大量免费的新闻、专题邮件,并实现轻松的信息搜索。
这是任何传统的方式也无法相比的。
正是由于电子邮件的使用简易、投递迅速、收费低廉,易于保存、全球畅通无阻,使得电子邮件被广泛地应用,它使人们的交流方式得到了极大的改变。
统是互联网,同时电子邮件也是互联网上最受欢迎的功能之一。
通过电子邮件系统,您可以用非
随着网络越来越普及,现在已经是人人一个电子邮箱甚至有多个电子邮箱。
在Internet上使用最多的服务当属电子邮件服务了。
可见,电子邮件与人们的工作、学习和生活息息相关,它已经深深的融入到每个人的生活中,生活在这个网络时代的人是不可能没有电子邮箱的。
电子邮箱已经由以前科技工作者用于科技信息交流转变到现在大多数人用来进行日常生活工作学习的交流工具。
同时,电子邮箱的功能也发生了翻天覆地的变化。
由原来只能收发文本到现在的收发多媒体文件。
简化邮件的编码,减少编码造成的数据冗余。
这些都得宜于与电子邮箱有关的网络协议的发展和有关硬件的改进。
现在我们每天都习惯于通过E-mail进行交流,各大网站也几乎都推出了自己的基于WEB的免费邮件系统。
电子邮件已无可争议的地成为互联网上最受用户欢迎的服务。
邮件的安全也逐渐受到人们的重视。
至今已出现了各种安全保障措施来加强E-mail的安全性。
随着电子邮件服务的完善和安全性的不断提高。
电子邮件毫无疑问将在人类的通信史上占有一席之地。
如同其他的网络服务,电子邮件系统也有其使用的传输协议,包括SMTP(SimpleMailTransferProtocol,简单邮件传输协议)、POP(PostOfficeProtocol,邮局协议)和IMAP(InternetMessageAccessProtocal)消息访问协议)等,这些协议应用于电子邮件的发送和接收。
一些邮件处理软件如OutLookExpress和FoxMail等就是按照SMTP和POP3协议结合WindowsSockets套接字进行设计来收发邮件的。
二电子邮件收发原理及相关技术
本章简单介绍了SMTP协议,POP3协议的工作原理。
只有较深入的掌握了这两个协议的主要内容,才能理解基于SMTP,POP3的邮件收发系统是怎样工作。
2.1SMTP协议简介
2.1.1SMTP协议原始命令码和工作原理
SMTP(SimpleMailTransferProtocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,或者说是由它来控制信件传输的一种中转方式。
SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。
通过SMTP协议所指定的服务器,我们就可以把Email寄到收信人的服务器上了,整个过程只要几分钟。
SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转电子邮件。
(1)SMTP协议的通信模型
首先针对用户发出的邮件请求,由发送SMTP建立一条连接到接收SMTP的双工通讯链路,这里的接收SMTP是相对于发送SMTP而言的,实际上它既可以是最终的接收者也可以是中间传送者。
发送SMTP负责向接收SMTP发送SMTP命令,而接收SMTP则负责接收并反馈应答。
SMTP命令
邮件内容
应答
图2-1SMTP协议通信模型示意图
(2)SMTP协议的命令和应答
从前面的通讯模型可以看出SMTP协议在发送SMTP和接收SMTP之间的会话是靠发送SMTP的SMTP命令和接收SMTP反馈的应答来完成的。
在通讯链路建立后,发送SMTP发送MAILFROM:
命令指令邮件发送者,若接收SMTP此时可以接收邮件则作出OK的应答,然后发送SMTP继续发出RCPT命令以确认邮件是否收到,如果接收到就作出OK的应答,否则就发出拒绝接收应答,但这并不会对整个邮件操作造成影响。
双方如此反复多次,直至邮件处理完毕。
SMTP协议共包含10个SMTP命令,列表如下:
-------------------------------------------------------------------------------表2-1SMTP命令命令说明
-------------------------------------------------------------------------------
HELLO<domain><CRLF>识别发送方到接收SMTP的一个HELLO命令
MAILFROM:
<reverse-path><CRLF><reverse-path>为发送者地址。
此命令告诉接收方一个新邮件发送的开始并对所有的状态和缓冲区进行初始化。
此命令开始一个邮件传输处理最终完成将邮件数据传送到一个或多个邮箱中。
RCPTTO:
<forward-path><CRLF>标识各个邮件接收者的地址
DATA<CRLF>接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF>标识数据的结尾。
REST<CRLF>退出/复位当前的邮件传输
NOOP<CRLF>要求接收SMTP仅做OK应答。
(用于测试)
QUIT<CRLF>要求接收SMTP返回一个OK应答并关闭传输。
VRFY<string><CRLF>验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。
EXPN<string><CRLF>验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。
HELP<CRLF>查询服务器支持什么命令
VRFY<CRLF>用于验证给定的用户邮箱是否存在,以及接收关于该用户的详细信息。
EXPN<CRLF>用于扩充邮件列表。
-------------------------------------------------------------------------------
注:
<CRLF>为回车、换行,ASCII码分别为13、10(十进制)。
-------------------------------------------------------------------------------
MAIL FROM命令中指定的地址是称作 envelope from地址,不需要和发送者自己的地址是一致的。
RCPT TO 与之等同,指明的接收者地址称为envelope to地址,而与实际的to:
行是什么无关。
邮件被分为信封部分,信头部分和信体部分envelope from, envelope to 与message from:
message to:
完全不相干。
evnelope是由服务器主机间SMTP后台提供的,而message from/to是由用户提供的。
有无冒号也是区别。
SMTP协议的每一个命令都会返回一个应答码,应答码的每一个数字都是有特定含义的,如第一位数字为2时表示命令成功;为5表失败;3表没有完成。
一些较复杂的邮件程序利用该特点,首先检查应答码的首数字,并根据其值来决定下一步的动作。
下面将SMTP的应答码列表如下:
----------------------------------------------------------------
表2-2应答码说明
----------------------------------------------------------------
501参数格式错误
502命令不可实现
503错误的命令序列
504命令参数不可实现
211系统状态或系统帮助响应
214帮助信息
220<domain>服务就绪
221<domain>服务关闭
421<domain>服务未就绪,关闭传输信道
250要求的邮件操作完成
251用户非本地,将转发向<forward-path>
450要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)
550要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)
451放弃要求的操作;处理过程中出错
551用户非本地,请尝试<forward-path>
452系统存储不足,要求的操作未执行
552过量的存储分配,要求的操作未执行
553邮箱名不可用,要求的操作未执行
354开始邮件输入,以"."结束
554操作失败
(3)SMTP协议工作原理
SMTP协议规定的命令是以明文方式进行的。
SMTP工作在两种情况下:
一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。
SMTP是个请求/响应协议,命令和响应都是基于ASCII文本,并以CR和LF符结束。
响应包括一个表示返回状态的三位数字代码。
SMTP服务器在TCP协议25号端口监听连接请求。
连接和发送过程如下:
a.建立TCP连接
b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。
c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行。
服务器端则表示是否愿意为收件人接受邮件。
d.协商结束,发送邮件,用命令DATA发送。
e.以.表示结束输入内容一起发送出去。
f.结束此次发送,用QUIT命令退出。
2.1.2SMTP协议的会话流程
在进行程序设计之前有必要弄清SMTP协议的会话流程,其实前面介绍的内容已经可以大致勾勒出用SMTP发送邮件的框架了,对于一次普通的邮件发送,其过程大致为:
先建立TCP连接,随后客户端发出HELLO命令以标识发件人自己的身份,并继续由客户端发送MAIL命令,如服务器应答为"OK",可继续发送RCPT命令来标识电子邮件的收件人,在这里可以有多个RCPT行,而服务器端则表示是否愿意为收件人接受该邮件。
在双方协商结束后,用命令DATA将邮件发送出去,其中对表示结束的"."也一并发送出去。
随后结束本次发送过程,以QUIT命令退出。
下面通过一个实例,从langrui@发送邮件到renping@来更详细直观地描述此会话流程:
(S;SENDERR:
RECIEVOR)
s:
建立连接
R:
220SimpleMailTransferServiceReady
S:
HELLO//客户端发出HELLO命令以标识发件人自己的身份
R:
250
S:
MAILFROM:
<langrui@>//客户端发送MAIL命令
R:
250OK//250要求的邮件操作完成
S:
RCPTTO:
<renping@>//发送RCPT命令来标识电子邮件的收件人,在这里可以有多个RCPT行
R:
250OK//250服务器端则表示是否愿意为收件人接受该邮件
S:
DATA//命令DATA将邮件发送出去
R:
354Startmailinput;endwith"<CRLF>.<CRLF>"
S:
Blahblahblah...
S:
...等等
S:
R:
250OK
S:
QUIT
R:
221Serviceclosingtransmissionchannel
2.2POP3协议
2.2.1POP3协议用于电邮接收的工作模式和原理
POP的全称是PostOfficeProtocol,即邮局协议,用于电子邮件的接收,它使用TCP的110端口。
现在常用的是第三版,所以简称为POP3。
POP3仍采用Client/Server工作模式,Client被称为客户端,Server是服务器端。
应用层协议建立在网络层协议之上,相应的软件会调用应用层的相应协议。
如当打开Foxmail这个邮件软件收取邮件时,Foxmail这个软件就会调用TCP/IP参考模型中的应用层协议-POP协议。
POP这个应用层的协议会指挥TCP协议,利用IP协议将一封大邮件拆分成若干个数据包在Internet上传送。
(1)POP3标准命令
这个协议只包含12个命令(其中有3个完全可以忽略它们的存在)。
这些命令被客户端计算机用来发送给远程服务器。
反过来,服务器返回给客户端计算机两个回应代码。
POP3命令由一个命令和一些参数组成。
所有命令以一个CRLF对结束。
命令和参数由可打印的ASCII字符组成,它们之间由空格间隔。
命令一般是三到四个字母,每个参数却可达40个字符长。
POP3服务器响应由一个状态码和一个可能跟有附加信息的命令组成。
不同服务器的回应会有所不同,但开头部分都是一样的所有响应也是由CRLF对结束。
现在有两种状态,"确定"("+OK")和"失败"("-ERR")。
------------------------------------------------------------------------
表2-3POP3标准命令
(2)POP3工作原理简介
下面简单介绍一下电子邮件软件收取电子邮件的过程,一般我们在电子邮件软件的账号属性上设置一个POP服务器的URL(UniformResourceLocator)(比如),以及邮箱的账号和密码。
当我们按下电子邮件软件中的收取键后,电子邮件软件首先会调用DNS(DomainNameServer)协议对POP服务器进行解析IP地址,当IP地址被解析出来后,邮件程序便开始使用TCP协议连接邮件服务器的110端口,因为POP服务器是比较忙的,所以在这个过程中我们相对要等比较长的时间。
当邮件程序成功地连上POP服务器后,其先会使用USER命令将邮箱的账号传给POP服务器,然后再使用PASS命令将邮箱的账号传给服务器,当完成这一认证过程后,邮件程序使用STAT命令请求服务器返回邮箱的统计资料,比如邮件总数和邮件大小等,然后LIST便会列出服务器里邮件数量。
然后邮件程序就会使用RETR命令接收邮件,接收一封后便使用DELE命令将邮件服务器中的邮件置为删除状态。
当使用QUIT时,邮件服务器便会将置为删除标志的邮件给删了。
通俗地讲,邮件程序从服务器接收邮件,其实就是一个对话过程,POP协议就是用于电子邮件的一门语言。
(3)POP3会话的3个状态
a."确认"状态
首先TCP连接由POP3客户打开,POP3服务器发送一个单行的确认。
这个消息可以是由CRLF结束的任何字符。
例如,它可以是:
S:
+OKPOP3serverready
此时POP3会话就进入了"确认"状态。
此时,客户必须向服务器证明它的身份。
在此介绍两种可能的处理机制,一种是USER和PASS命令,另一种是在后面要介绍的APOP命令用USER和PASS命令进行确认过程,客户必须首先发送USER命令,如果POP3服务器以"确认"状态码响应,客户就可以发送PASS命令以完成确认,或者发送QUIT命令终止POP3会话。
如果POP3服务器返回"失败"状态码,客户可以再发送确认命令,或者发送QUIT命令。
当客户发送了PASS命令后,服务器根据USER和PASS命令的附加信息决定是否允许访问相应的存储邮件。
一旦服务器通过这些数据决定允许客户访问储存邮件,服务器会在邮件上加上排它锁,以防止在进入"更新"状态前对邮件的改变。
如果成功获得了排它锁,服务器返回一个"确认"状态码。
会话进入"操作状态",同时没有任何邮件被标记为删除。
如果邮件因为某种原因不能打开(例如,排它锁不能获得,客户不能访问相应的邮件或者邮件不能进行语法分析),服务器将返回"失败"状态码。
在返回"失败"状态码后,服务器会关闭连接。
如果服务器没有关闭连接,客户可以重新发送确认命令,重新开始,或者发送QUIT命令。
在服务器打开邮件后,它为每个消息指定一个消息号,并以八进制表示每个消息的长度。
第一个消息被指定为1,第二个消息被指定为2,以此类推,第N个消息被指定为N。
在POP3命令和响应中,所以的消息号和长度以十进制表示。
下面是在"确认"状态中可用的命令:
USERusername;PASSpassword;QUIT
b."操作"状态
一旦客户向服务器成功地确认了自己的身份,服务器将锁住并打开相应的邮件,这时POP3会话进入"操作"状态。
现在客户可以重复下面的POP3命令,对于每个命令服务器都会返回应答。
最后,客户发送QUIT命令,会话进入"更新"状态。
下面是在"操作"状态中可用的命令:
STAT;LISTmsg;RETRmsg;DELEmsg;NOOP;RSET;TOPmsgn;UIDL[msg]
c."更新"状态
当客户在"操作"状态下发送QUIT命令后,会话进入"更新"状态。
(注意:
如果客户在"确认"状态下发送QUIT后,会话并不进入"更新"状态。
)如果会话因为QUIT命令以外的原因中断,会话并不进入"更新"状态,也不从服务器中删除任何信件。
QUIT在"更新"状态有效。
;
可选的POP3命令:
APOPnamedigest在"确认"状态有效
TOPmsgn;UIDL[msg]在"操作"状态有效
注:
除了STAT,LIST和UIDL的响应外,其它命令的响应均为"+OK"和"-ERR"。
响应后的所有文本将被客户略去。
2.2.2POP3会话流程
S:
<等待连接到TCP端口110>
C:
<打开连接>
S:
+OKPOP3serverready
C:
USERusername
S:
+OK
C:
PASSpassword
S:
+OK
C:
STAT//请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
S:
+OK2320
C:
LIST//返回邮件数量和每个邮件的大小
S:
+OK2messages(320octets)
S:
1120
S:
2200
S:
….
C:
RETR1//回由参数标识的邮件的全部文本
S:
+OK..
S:
<服务器发送信件1>
S:
……
C:
DELE1
S:
+OKmessage1deleted
C:
QUIT
S:
+OKdeweyPOP3serversigningoff(maildropempty)
C:
<关闭连接>
S:
<等待下一次连接>
2.3RFC822简介
电子邮件是全世界通用的。
你可以给任何一个人发送电子邮件而不用考虑他所处的地理位置在哪或他使用的是什么软件作为邮件接受客户端。
和其他与Internet相关的事物一样(或者可以说,与计算机技术相关的事物),电子邮件也是基于一种标准的,而人们把这个特殊的标准称作RFC822。
这个标准早在二十多年前(准确的日期是一九八二年八月十三日)就公布于世,在这期间它基本没有改变。
在2001年公布的RFC2822标准取代了RFC822,但是它的基本内容和RFC822是完全一致的,只是做了一些很小的更新和改动。
而其他的一些邮件标准,比如RFC850(在USENET上使用),同样也基于RFC822标准。
(RFC,RequestForComments)
2.4Winsock简介
许多网络程序都是采用Socket套接字实现的,对于一些标准的网络协议如HTTP、FTP和SMTP等协议的编程也是基于套接字程序的,只是端口号不再是随意设定而要由协议来指定,比如HTTP端口在80、FTP是21,而SMTP则是25。
Socket只是提供在指定的端口上同指定的服务器从事网络上的通讯能力,至于客户和服务器之间是如何通讯的则由网络协议来规定,这对于套接字是完全透明的。
因此可以由Socket套接字为SMTP提供网络通讯基础,而对于网络通讯连路建立好之后采取什么样的通讯应答则要按SMTP协议的规定去执行了。
本科题为方便起见,没有采用编写较复杂的WindowsSocketsAPI进行编程,而是使用经过较好封装的MFC的CSocket类。
2.5MFC简介
MFC(MicrosoftFoundationClassLibrary)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
MicrosoftVisualC++提供了相应的工具来完成这个工作:
AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
MFC封装了Win32API,OLEAPI,ODBCAPI等底层函数的功能,并提供更高一层的接口,简化了Windows编程。
同时,MFC支持对底层API的直接调用。
MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。
框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。
MFC是C++类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。
例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。
实现这种功能的基础是C++对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。
三电子邮件系统的设计和开发
本章首先对SMTP协议,POP3协议的工作流程作了详细的分析,然后按照SMTP和POP3协议结合WindowsSockets套接字进行设计实现代码并封装成CSMTP协议类和CPOP3协议类。
最后根据客户端的基本需求设计成客户端邮件收发软件,并以友好的界面形式呈现出来。
3.1服务器端作用简介
SMTP,POP3采用Client/Server工作模式,Client被称为客户端,一般我们日常使用电脑都是作为客户端,而Server(服务器)则是网管人员进行管理的。
SMTP服务器的主要功能就是接收来自客户端的SMTP协议命令,然后对这些命令进行解析,根据不同的命令进行不同的处理,处理完成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- POP3 设计 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)