收藏 分销(赏)

毕业设计(论文)-基于POP3的邮件收发系统的设计与实现.doc

上传人:可**** 文档编号:2592645 上传时间:2024-06-02 格式:DOC 页数:70 大小:1.05MB
下载 相关 举报
毕业设计(论文)-基于POP3的邮件收发系统的设计与实现.doc_第1页
第1页 / 共70页
毕业设计(论文)-基于POP3的邮件收发系统的设计与实现.doc_第2页
第2页 / 共70页
毕业设计(论文)-基于POP3的邮件收发系统的设计与实现.doc_第3页
第3页 / 共70页
毕业设计(论文)-基于POP3的邮件收发系统的设计与实现.doc_第4页
第4页 / 共70页
毕业设计(论文)-基于POP3的邮件收发系统的设计与实现.doc_第5页
第5页 / 共70页
点击查看更多>>
资源描述

1、陕西理工学院毕业设计题 目 基于POP3的邮件收发系统的设计与实现 学生姓名 学号 所在学院 物理与电信工程学院 专业班级 电子1201班 指导教师 完成地点 物电学院计算机信息处理实验室 2016 年 6 月 5 日陕西理工学院毕业设计毕业论文设计任务书院(系) 物电学院 专业班级 电子信息工程 学生姓名 一、毕业论文设计题目 基于POP3的邮件收发系统的设计与实现 二、毕业论文设计工作自_2016 _年_3 _月10 日 起至_ 2016_年 6 月 20 日止三、毕业论文设计进行地点: 物电学院计算机信息处理分室 四、毕业论文设计的内容要求:POP3(Post office Protoc

2、ol 3)是适用于C/S结构的脱机模型电子邮件协议,它规定怎样将个人计算机连接到Internet的邮件服务器下和下载电子邮件的协议。本设计要求学生,在Visual c+环境下,使用POP3技术开发一个邮件接收系统,接收邮件服务器上的邮件之后,把邮件下载并保存到本地计算机上,要求可以提取邮箱里的邮件数量和标题字段等内容。 五、 毕业论文设计应收集资料及参考文献:1徐孝凯,张纪勇.C+面向对象程序设计:VC+6.0运行环境M.天津大学出版社2009. 2汪晓平,钟军.VC+网络通信协议分析与应用实现M.北京:人民邮电出版社,2003. 3王艳平,张越.Windows网络与通信程序设计M.北京:人民

3、邮电出版社,2006. 4 Andrew S.Tanenbau.计算机网络(第四版)M.北京:清华大学出版社,2004. 5谢希仁.计算机网络(第五版)M.北京:电子工业出版社,2012. 6朱桂英.张元亮 Visual C+网络编程开发与实践M.清华大学出版社.2013. 六、 毕业论文设计的进度安排: 3月2日3月29日:查阅资料,完成初步设计方案和开题报告。 4月1日4月26日:根据POP3邮件收发系统的工作原理,给出设计方案,及软件流程图。 4月29日5月24:并在软件环境下进行运行调试,进一步完善系统功能,整理资料; 5月27日6月7日:撰写、修改毕业设计论文。 6月10日6月15日

4、:打印论文准备并完成答辩。 指导教师签名 系(教研室)主任签名 专业负责人签名 批准日期 基于POP3的邮件收发系统的设计与实现(陕西理工学院物理与电信工程学院电子信息工程专业,2012级1班,陕西 汉中 723000)指导教师:摘要电子邮件是互联网基础服务中重要的一部分。从互联网在上世纪90年代开始逐步发展之时到今天信息极大丰富的互联网2.0时代,实现电子邮件POP3收取都有重要的意义。本设计使用Visual Studio 2010作为开发平台,使用Windows Socket 2应用程序接口,实现了一个具有POP3邮件接收和保存功能的计算机邮件接收程序,同时介绍了POP3邮件接收协议、ba

5、se64解码方法和基于Windows下Visual C+的程序设计以及实现的方法。 关键字电子邮件; POP3协议; Winsock2; Visual C+Design and implementation of an E-mail system based on POP3 protocolChen(Grade12,Class01,Major electronics and information engineering School of Physics and Telecommunication Engineering, Shaanxi University of Technology,

6、Hanzhong 723000,Shaanxi)Tutor: Abstract: E-mail is an important part of basic Internet service. From the beginning of the progressive development of the Internet in the 1990s, to the great wealth of information in the Internet 2.0 era today, achieveing the e-mail POP3 charge always is an important s

7、ignificance. This design uses Visual Studio 2010 as the development platform, using the Windows Socket 2 application program interface, achieved a computer mail receiving program which having a POP3 mail receiving and storing function with the POP3 mail receiving protocol which based on Windows unde

8、r Visual C + programming and methods of implementation.Keywords: E-mail; POP3 protocol; Winsock2; Visual C +目录1. 引言11. 1 背景11. 2 研究目的11. 3 开发环境及语言11. 3. 1 开发环境11. 3. 2 开发语言21. 4 WinSock2简介32. POP3协议与传输标准52. 1 POP3状态简述52. 1. 1 认证(Authorization)状态52. 1. 2 事务(Transaction)状态62. 1. 3 更新(Updata)状态72. 2 Ba

9、se64标准82. 2. 1 BASE64编码82. 2. 2 BASE64解码92. 3 中文字符编码标准92. 3. 1 GB2312字符集92. 3. 2 GBK字符集92. 3. 3 UNICODE编码93. 系统流程和规划103. 1 主程序总体设计103. 2 POP3执行流程113. 3 BASE64解码流程133. 3. 1 主题与发件人解码133. 3. 2 邮件正文解码143. 4 邮件保存流程154. POP3邮箱的C+实现174. 1 TCP发送接收的实现174. 1. 1 发送函数的C+封装174. 1. 2 接收函数的C+封装174. 2 POP3协议命令的实现18

10、4. 2. 1 认证状态C+实现184. 2. 2 事务状态C+实现184. 2. 3 更新状态C+实现184. 3 Base64 的C+解码实现194. 3. 1 BASE64块解码194. 3. 2 BASE64文本解码194. 3. 3 BASE64解码邮件主题205. 软件测试21结束语23致谢24参考文献25附录A:26附录B:44ii1. 引言电子邮件(electronic mail 简称E-mail)是指用电子方式传送的信件。其中也可能包括多媒体信息,包括图片、音乐、视频等等。电子邮件是基础互联网服务之一,从古老的阿帕网开始算起,尽管目前互联网发展已经有将近50年,电子邮件诞生也

11、超过45年,但是电子邮件始终是最为广泛应用的,也是最为可靠的信息传送方式之一。电子邮件不仅可以用来发送接收普通文本信件消息,现代的电子邮件多数都是基于html超文本标记语言的,通过在支持这一协议的客户端或者网页端打开邮件,用户能感受到和最简单的文本邮件完全不一样的体验。它甚至可以让用户免费得到大量的多媒体信息,通过邮件订阅,用户也可能得到免费新闻和专题报道等等内容。电子邮件由于其优越的特性,在上世纪上网仍然需要拨号的时代就开始广为流行,并在国内获得了“伊妹儿”这一昵称。网民对其喜爱程度可见一斑。电子邮件的蓬勃发展和其C/S结构是分不开的,邮件服务只要求服务器长时间在网,客户端完全可以脱离网络,

12、只在接收发送邮件的短时间内才连接网络,这种特性大大降低了早期互联网发送邮件的费用。任何服务器和客户端之间的连接都需要通过协议支持才能完成,而POP3协议(Post Office Protocol - Version 3,邮局协议版本3)就是支撑这种特性实现的基础。通过这一技术,用户可以只在很短的时间内联网,就可以下载大量邮件并且离线阅读,节省了互联网初期用户的费用开支的同时,也极大的丰富了人民的网络信息生活。1. 1 背景电子邮件曾经是网络上最主要的通信方式,从1971年诞生开始,电子邮件就开始改变了人们的信息交流方式。1987年9月份,CANET在北京计算机应用技术研究所内正式建成了中国第一

13、个国际互联网电子邮件节点,并在9月14日发出了中国第一封电子邮件。这一事件标志着中国人使用互联网的历史拉开了序幕,可见电子邮件系统在互联网时代的重要性绝非其他互联网服务可以相提并论的。到了21世纪,在即时通信和社交网络的冲击下,关于电子邮件是否仍然有必要存在的争论开始进入人们的视线,但是电子邮件作为商务交流和网络账号注册中不可或缺的一部分,电子邮件现在仍然在全球范围内拥有众多用户。计算机网络并无国界,和即时通讯充满竞争并且协议不公开的现状不同,电子邮件协议统一并且可以轻松发往国外,这也使电子邮件更为适合国际化环境下的应用。自从谷歌提供免费GB级别的谷歌邮箱开始,多数互联网邮件提供商都开始了免费

14、化服务,邮件存储空间扩大,删除邮件也变得不再是必须的。而用户发送电子邮件成本几乎为0,低成本的邮件发送服务也使得垃圾邮件一度十分猖獗。近年来,电子邮件技术日趋成熟,已经开始了从以提供和保证邮箱基础服务为主的POP3/SMTP协议向以提供安全邮件信息服务为特征的SSL/ IMAP协议过渡。作为全世界使用最广泛的通信方式之一,电子邮件的开放性极大地方便了各地网民的信息交流,及资源的共享。1. 2 研究目的虽然现在绝大多数邮件服务商都有网页版本的邮件服务端,但是对于网络收到资费限制的地方,或者处理能力有限的嵌入式设备,POP3协议相比网页端都是更加适合这些应用环境的。同时,众多软件内部都包含邮件接收

15、系统,比如有些软件的bug反馈就是通过客户端内置的SMTP服务向服务器发送bug反馈邮件,在服务端查看邮件的时候就可能需要使用到pop3协议。因此清楚POP3协议并且使用C+语言实现协议执行功能,仍然是十分有必要的。1. 3 开发环境及语言本文中POP3邮箱使用Visual Studio 2010开发环境,使用C+语言编写程序代码。1. 3. 1 开发环境Visual Studio可以用来创建Windows平台下的Windows应用程序。Visual Studio 2010相比VC+6.0具有新外观和新功能,功能也更加强健。VC+6.0发布于1998年,当时主流系统还是Windows 95/9

16、8,尽管后来发布了SP6补丁包,但是对新的操作系统支持仍然很不够。1998年时C+语言也没有统一标准,C+第一个标准是1999年发布的,所以导致VC+6.0语法和相当一部分编译器不兼容。而这些问题在Visual Studio 2010中都没有出现。Visual Studio 2010是微软在2010年推出的多语言编译器,可以支持C/C+,C#,Visual Basic等一系列语言。同时部分支持C+ 0x标准,对于新的语言特性有更好的支持的同时,也更加符合现代程序开发流程,团队化合作非常方便。并且可以支持新的操作系统,Windows 7等NT6.0以上的系统和Windows XP都能完美支持,并

17、且开发的程序安全性能更好。但是相对于VC+6.0,Visual Studio 2010国内教材和书籍更少,因此学习成本也更大。为了实现完整的邮箱功能,更加符合现代化操作系统程序开发,本文中选择使用Visual Studio 2010作为设计开发平台。Visual Studio 2010包含很多完全集成的工具。这些工具可以使编写C+程序的过程变得十分轻松。作为IDE的一部分,Visual Studio 2010提供了编辑器,编译器,链接器和库。这些都是编写C+程序所需要的基本工具1。他们的功能如下:1) 编辑器:编辑器给用户提供了创建和编写C+代码的环境。除了常见的文本操作功能,比如复制粘贴等等

18、,编辑器一般还提供语言元素高亮这一功能。它可以自动识别C+语言当中的关键字,并且按照分类给这些关键字着不同的颜色,这一功能使得代码的可读性更加好,并且当程序员拼错关键词时,编译器会给出清楚的提示。2) 编译器:编译器可以将编辑器编辑后的源代码转换为目标代码,并且在这个过程当中检测代码错误。代码错误包括无效的或者不能被识别的代码,或者代码结构错误(比如代码永远不会被执行到,代码缺少了大括号等等)。编译器输出的目标代码存储在目标文件当中,在Visual Studio当中,目标文件是obj格式的。3) 链接器:链接器根据编译器输出的obj目标代码生成各种模块。从程序库当中添加所需代码模块之后将所有模

19、块组合成可以执行的可执行文件。链接器也会检测和报告错误,这些错误一般是程序缺少了某个模块,或者程序当中使用了不存在的库文件,等等。4) 库:库并不只是预先写好的示例代码集合,它更是经过专业制作的标准代码,可以扩展并且支持C+语言的特性。这些代码经常整合到用户的程序中,来执行非常常见的功能2。Visual Studio 2010提供了本论文当中必不可少的标准库,比如IO流,顺序容器,字符串。关联容器等等。1. 3. 2 开发语言本文使用C+语言作为程序开发语言。C语言始于1972年,在1983年,贝尔实验室的Bjarne Strou-strup发明了一种基于C语言的扩充和完善版本的语言:C+。

20、C+面向对象,并且继承了C语言的高效率,这使得C+很快推广了起来并且获得了成功。C+经历了33年的打磨时间的打磨,其在工业界的地位已经相当稳固,在很多领域里已经是不可取代也没有必要取代的统治者。C+具有非常好的跨平台特性,并且具有足够高的效率。这对于计算机网络编程而言,这两者都非常重要。因为因特网并不区分接入设备的操作系统,无论是Windows系列的Windows XP, Windows 7, Windows Server还是POSIX系列的Linux,UNIX,以及基于这两者的众多安卓移动设备,苹果Pad等,都要能接入互联网。众多的设备底层完全支持C+,这为程序的可移植性提供了保证。而效率是

21、另外一方面。计算机网络要求具有低延迟的连接特性,因此效率必须足够,这一点C+也可以保证。因此C+完全具备开发网络应用程序的一切特性。C+语言是一门充满活力的编程语言。它不仅跨平台,具有强大的功能,极高的效率,在此同时还能保持语言进化相当的活力。从C+ 标准1998年版本到C+2011年版本的,C+正在变成一门完美的程序设计语言。原来版本当中来不及引入的内容,以及语言机制中发现的一些缺陷,都在新的版本当中得以弥补和发展。比如新版标准当中引入了无序容器,以弥补原版标准中对hash容器的缺陷。新版本标准支持移动构造函数和移动赋值运算符,以减小特定场合下对象拷贝的性能开销。新版本标准不但在语法上增加了

22、大量特性,而且在标准库当中引入了大量设施,这不光使得标准库对于C+语言的重要性远超从前3,也使得“重复造轮子”,尤其是制造低级轮子这种事情在C+语言界变成上一个时代的事情。1. 4 WinSock2简介C+网络编程在不同的操作系统上需要不同的编程规范。WinSock规范就是Windows下为编写通用TCP/IP应用程序提供的一个强大且可扩展的API。程序员可以使用一个基于Windows Sockets规范的Windows Sockets来实现创建任何类型的TCP/IP客户端或者服务器应用程序。 Windows Sockets规范有两个主要版本,1.1版本和2版本。Windows Sockets

23、规范1.1版本的作者试图限制WinSock的范围以促进WinSock的发展和成功。 这一目标确实达成了,Windows Socket1.1仅仅支持TCP/IP协议,它对其他的协议并没有提供支持。同时Windows Socket 1.1仅仅能创建一个活跃的dll,这种特性也限制了这一版本的灵活性。因此可见,Windows Socket1.1主要提供的是针对TCP/IP协议,单一活跃dll而设计的。而Windows Sockets规范2.0版本正式为一系列其他协议提供了API支持,并且允许他们同时存在。Windows Sockets2也增加了一些具有实质功能的新函数。并且,最重要的一点是,Wind

24、ows Sockets两个版本之间是兼容的,原来基于WinSock1.1的应用程序可以不用修改直接在Windows Sockets2上运行。这对于原本基于WinSock1.1开发的应用程序是非常重要的,平滑升级的同时也可以完全享受到Windows Sockets2带来一系列新特性和更高的效率提升。4Windows Sockets 2 相比Windows Sockets 1.1具有很多让人印象深刻的新特性。这些新特性所涉及的面积很广泛,具体可以包括以下几种分类:1) 多协议支持:新版本支持更多协议,可以方便用户二次开发2) 分散和聚合:新的协议版本对发送和接收提供了更多的缓冲器支持3) 重叠I/

25、O:应用使用异步I/O的时候提高了应用程序的执行效率4) QoS支持:WinSock2支持控制流量规范并且可以接收当其变化时的通知。5) Socket分组:通过对Socket的属性进行分组,并且支持按照分组设置优先级。6) 多点和多播:可以有选择性的发送数据,通过多播将数据发送到多个目标。7) 接受条件控制:根据协议连接与断开的变换中发送接收正常数据之外的其他数据。8) 进程级别的Socket共享功能:可以在一个或者多个进程中共享Socket。Windows Socket 2 API的数量和WinSock1.1相比,其函数数量多了几乎一倍之多。不同于仅支持单一活跃dll的WinSock,Win

26、Sock2同时可以在同一台计算机上面提供多个WinSocket,这让其灵活性大大增加,同时WinSock2增加了架构的灵活性,多个协议栈和接口仅仅使用一个顶层dll就可以完成所有的功能。WinSock API通过标准化服务提供接口与服务提供商进行交流,并且能够同时多进程的在多个服务提供商之间进行对话。下图展示了Windows Sockets2 架构的简单描述5:Windows Sockets 1.1 应用程序Windows Sockets 2应用程序WinSock1.1 APIWinSock.dll (16位) WSOCK32.dll (32位)WinSock2 APIWinSock2 服务提

27、供商接口WS2-32.dll(32位)附加传输服务提供商SPX/IPX等基于TCP/IP域名解析网页空间服务提供商TCP/IP传输服务提供商图1.1 Windows Socket 2的WOSA架构示意图2. POP3协议与传输标准POP3协议用来支持客户端远程管理服务器上面的电子邮件。这个协议允许用户连接到远程服务器之后,将邮件保存到本地计算机上,然后删除在服务器上的邮件副本。这个协议是在RFC-1939当中定义的。POP3协议采用Client/Server工作模式。POP3服务器遵循POP3协议,始终保持在线来接收其他电子邮箱发送过来的邮件,而POP3客户端则负责和POP3服务器连接,在这之

28、后,下载在服务器端的邮件。在默认配置下,该协议使用TCP连接,110端口进行访问。POP3协议是一个并不复杂的协议,因此很多人们熟悉的功能在这个协议当中并没有直接实现。比如查看收到了多少封新邮件,恢复之前被删除的邮件等等功能。这些功能需要软件自己记住之前接收的邮件,然后通过计算得出新邮件到底有哪些才能完成任务。这一特性有些像RISC架构通过实现一些最简单和最常用的功能,对这些功能进行复杂组合之后,就可以实现更高的复杂性才能完成的任务,而且效率也很高。2. 1 POP3状态简述POP3协议通过一系列命令,使得服务器和客户端之间建立连接并登录,之后传送邮件等等。POP3本身命令并没有很多,只包含了

29、最基本的一些功能,如登录认证,下载邮件,删除邮件等等,除此之外,POP3指令还有3个可选指令,能够实现一些增强安全性等等的功能6。POP3命令和其当前所处的状态是分不开的,一些命令只能在部分状态下面使用,一些命令又会导致当前状态发生改变,所以设计计算机程序的时候,也要注意这些才能正确编程处理,否则可能会发生一些意外的bug。2. 1. 1 认证(Authorization)状态按照命令状态区分,经常在“认证”状态执行的命令有两个:USER命令:USER命令只能在认证的状态下使用,而且必须是通过Greeting命令和服务器打过招呼之后,或者USER+PASS命令认证失败之后才能执行的命令。这个命

30、令的使用方式是USER+用户登录名+rn。这里的rn是常见的转义字符,意义等同于按下回车键。例如当登录用户名是”sinper”的时候,命令就应该这么执行:”USER sinperrn”。这个命令根据执行正确与否,可能得到服务器两个回复:+ OK 用户名有效- ERR 用户名无效任何一个命令执行是否成功都能通过返回的回复得到判断。如果回复是以+ OK开头的,这样的回复就代表上一个命令成功执行了。如果回复以- ERR开头,这就代表这个命令执行失败,需要结合具体情况来判断之后的操作。PASS命令:PASS命令只能在认证状态下使用,并且需要在这之前成功执行过USER命令。和USER命令相似,它的使用方

31、式也是PASS+用户密码+rn。例如登录名是sinper的用户使用了a1b2c3密码的时候,命令应该这样执行:”PASS a1b2c3rn”。这个命令根据执行正确与否,可能得到服务器两个回复:+ OK 登录成功- ERR 登录失败登录失败的原因并不仅仅只有密码错误这一种常见的情况。POP3协议会在一个连接过程中为这个用户邮箱加锁,这样其他的POP3程序就不能再次访问这个邮箱了,当然也就不能在有其他人登录这个邮箱的时候再次登录,除非这个连接因为超时自动断开,锁自动解除。邮箱加锁情况下,POP3服务器同样会登录失败7。2. 1. 2 事务(Transaction)状态经过这两个命令之后,如果执行成

32、功,服务器状态就会从认证状态(AUTHORIZATION)转到了事务状态(TRANSACTION)。这时就可以读取邮件,删除邮件,更新邮件系统等等操作了。STAT命令:STAT命令只能在事务状态使用,否则POP3服务器端会报错。这个命令并没有任何参数,执行之后会返回当前登录的邮箱的邮件数量和总邮件大小。得到的回复一般如下:+ OK 2 320/包含两封邮件,一共320byte大小- ERR command not vaild in this stat./状态不正确,可能是在认证状态错误使用了命令。STAT命令的意义是,可以为客户端收件软件预估要占用的内存空间和存储硬盘空间的大小,当内容过于庞大

33、的时候提醒用户,不至于应用正在运行因为内存不够或者硬盘空间不足导致应用直接卡死或者崩溃。LIST命令:这个命令可以附带一个参数,也可以不附带参数。命令只能在TRANSACTION模式,即事务模式使用。当附带参数的时候,该命令的功能是返回指定邮件编号的大小。如果不带参数,那么这个命令执行之后,服务器端会返回所有邮件的大小。注意,如果用这个命令查看被标记为将要删除的邮件的大小的时候,可能返回错误值,因此不应该以这个值作为参考。这个命令根据执行参数和结果,可能得到服务器几种回复:不带参数,直接执行LIST+ OK 5 messages (720 octets)1 1502 2105 110.带参数执

34、行LIST 2:+ OK 2 210执行命令遇到错误:- ERR 命令失败,一般后面会跟随错误原因。RETR命令和TOP命令:这两个命令都可以让邮件服务器端返回邮件的具体信息,不同的是,TOP命令执行需要两个参数,一个具体邮件编号,一个返回前几行的行数。之后会返回和邮件发件人,发信时间等等这些信息。而RETR命令会返回邮件的全部信息,并且当然也包含TOP命令返回的一切。这两个命令都只能运行在事务模式下面,并且都必须带参数,参数的大小在1到邮件总数之间,表示返回具体哪个邮件的相关信息。两个命令执行之后,会得到+ OK信息,然后跟随几行到十几行的邮件信息。当邮件有相当多的内容或者有附件的时候,RE

35、TR命令可能会返回非常长的信息。这些信息一般使用BASE64进行编码,所以都是可以显示的内容。邮件内容显示结束之后,会有单独一行以一个单独的半角句号作为终止符,告诉POP3客户端信息传送完全结束了。至此一封邮件的要求内容将会被完全取回。命令成功执行。DELE命令:这个命令的作用是标记删除一封邮件,它需要带一个参数,表明具体删除邮件的标号。这个命令执行之后并不会直接删除邮件,而仅仅是做一个标记,等到执行QUIT命令的时候,脱离事务模式之后才会真正执行删除操作。客户端得到POP3服务器的回复一般都是+ OK,示例如下:执行DELE 3+ OK message 3 deleted/邮件1成功标记删除

36、执行 DELE 3- ERR message 3 already deleted/邮件2已经被标记为删除了REST命令:在一封邮件已经通过DELE命令标记删除之后,可以使用REST命令恢复标记,这样邮件就不会在执行错误删除之后,退出被真正删除了。这个命令不需要任何参数,因此执行完之后,任何之前被标记为需要删除的邮件,都会被取消标记。邮件服务器传回的信息如下:执行 REST+ OK maildrop has 3 messages (540 octets)NOOP命令:服务器和客户端连接需要占用一定资源,所以一般情况下服务器不可能长期保持一个TCP连接,而会在一段时间服务器和客户端之间没有数据交流

37、之后就自动断开连接,来达到节省系统资源,同时避免一些客户端卡死而无法释放连接,一直占用服务器资源这种情况发生。正常情况下,服务器和客户端需要保持定时发送一个命令来达到保持连接的要求。NOOP命令就能达到这样的功能。通过客户端定期向服务器发送NOOP命令,服务器可以知道客户端仍然在线,继续保持链接。这个命令执行之后,服务器端会返回一个积极回复,表示命令执行成功:执行 NOOP+ OK 2. 1. 3 更新(Updata)状态退出命令可以令系统从事务状态中退出,进入更新状态。在事务状态中标记为删除的邮件,如果退出事务状态之前没有执行过REST命令取消删除标记,将会在进入更新状态时候删除。进入更新状

38、态之后,连接将会自动断开,并且加在邮箱上登录锁也会被取消。这样,其他客户端就可以登录到这个邮箱当中了。QUIT命令:这个命令可以退出事务状态,使对话进入更新状态,这样之前的操作就可以得到执行了,比如之前如有过删除指令,在退出之后,删除将正式进行。这个命令本身并不需要参数,一般情况下,执行完这个语句之后,此次邮件服务器连接就会自动断开了。命令执行如下:执行QUIT+ OK /成功执行- ERR some deleted messages not removed/一些邮件没有被成功删除,返回错误2. 2 Base64标准电子邮件发明于上个世纪的美国,一开始只用于传输文本文件。英文文本绝大多数都是用

39、ASCII编码的,其特点是只使用了一个字节的低7位,最高位一般始终为0。电子邮件因此也只能传输这样的文本。后来电子邮件应用于非英语国家,兼容问题就出现了。例如中文文本,为了区分编码和ASCII并不一致,其最高位往往都是1,这样的信息直接使用POP3协议传输时不被允许的。因此需要一种协议将中文等其他语言的文本转化为可打印的ASCII文本才能发送。在MIME当中,有两种常用的编码转换方式,Quoted-printable和Base64。Quoted-Printable方式主要适用于ASCII文本当中夹杂了少量的非ASCII字符这种情况。该方式规定所有可以打印的ASCII字符都用原来的方式表示,而将

40、不可打印的ASCII用其16进制编码表示,前后各加一个=来表示。很明显,汉字包含大量不可打印ASCII字符,所以并不适合这种方式。相比Quoted-Printable标准,base64可以用更短的编码后文本传送更多的消息,在网络拥堵或者移动网络等环境不佳的条件下,这种编码也有更加优秀的表现。互联网上绝大多数邮件服务提供商也都是使用base64进行编码的。在这里我们着重讨论Base64编码。2. 2. 1 BASE64编码Base64之所以命名为base64,是因为选出了64个字符,基于这64个字符编码所有的二进制文件。这64个字符分别是大小写英文字母,10个数字,和符号+/。ASCII编码每8

41、个bit为一个字节,我们选取3个byte,这样一共有24bit,正好可以拆解成4个6bit,而,因此每3个字节会被编码成4个可打印字节。这样编码之后,其长度会比原来的文本长出大约三分之一作用,但是这样的编码保证了所有字符都是可打印的。下图十分直观地说明了base64编码规则,源字符ManASCII码值7797110Bit 码010011010110000101101110编码后码值1922546Base64编码TWFu图2.1 Base64编码示例当然编码过程中可能会遇到编码字符不足3个的时候,这时分为两种情况。1) 编码有两个字节:这种情况一共有两个8bit,一共16位二进制。我们仍然按照规

42、则转换成三组,前两组是正常编码,后一组剩下16-6-6=4个bit,向其结尾加两个0,之后进行编码。编码之后三个字符后面补一个“=”号表示三个字符缺少1个。2) 编码只有一个字节:这种情况一共有一个字节,8bit。我们按照规则转换成两组,第一组正常编码,后一组剩下8-6=2个bit,向其结尾加4个0,之后进行编码。编码之后两个字符后面补齐两个“=”符号,表示这一组三个编码字符缺少两个。Base64编码在很多场合都很常用,例如php语言中就提供了base64_encode()用于编码、base64_decode()用于解码。Python里面也有专门的模块来编码解码一系列base编码。但是C+语言

43、并没有可以直接使用的程序来完成这一任务,因此需要程序时自己实现这一功能。在本设计中,使用了map这一容器进行解码时的查找。2. 2. 2 BASE64解码本次毕业设计目的是完成POP3邮件解码,因此过程和编码过程完全相反。但是只要了解编码过程,解码过程只是它的逆过程,实现并不困难。解码过程先判断解码文本最后有几个=符号,来判断最后一个解码块有多少字符。其他部分可以按照4个byte解码为3个byte的方式运行。通过逻辑移位和或运算,解码过程运行速度很快,并不需要担心效率问题。2. 3 中文字符编码标准英文字符编码标准现在仍然使用的几乎只有ASCII编码。但是中文字符由于历史问题,编码并没有统一,现在仍然在使用的编码方案有几种,下面简单叙述一下两者之间的关系和之间的兼容性问题。2. 3. 1 GB2312字符集汉字显示的国内标准之一是GB2312,这个标准在1980年开始实施,由国家标准总局制定,通行于中国大陆。GB2312标准一共收录了6763个汉字,这其中包含一级汉字3755个,二级汉字3008个。该标准并不仅仅收录了中文一项内容,在此基础上,也收录了拉丁字母、希腊字母和日本平假名片假名

展开阅读全文
收益排行: 01、路***(¥15400+),
02、曲****(¥15300+),
03、wei****016(¥13200+),
04、大***流(¥12600+),
05、Fis****915(¥4200+),
06、h****i(¥4100+),
07、Q**(¥3400+),
08、自******点(¥2400+),
09、h*****x(¥1400+),
10、c****e(¥1100+),
11、be*****ha(¥800+),
12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服