基于POP3的邮件收发系统的设计与实现Word文件下载.doc
- 文档编号:7000955
- 上传时间:2023-05-07
- 格式:DOC
- 页数:70
- 大小:1.06MB
基于POP3的邮件收发系统的设计与实现Word文件下载.doc
《基于POP3的邮件收发系统的设计与实现Word文件下载.doc》由会员分享,可在线阅读,更多相关《基于POP3的邮件收发系统的设计与实现Word文件下载.doc(70页珍藏版)》请在冰点文库上搜索。
[4]AndrewS.Tanenbau.计算机网络(第四版)[M].北京:
清华大学出版社,2004.
[5]谢希仁.计算机网络(第五版)[M].北京:
电子工业出版社,2012.
[6]朱桂英.张元亮VisualC++网络编程开发与实践[M].清华大学出版社.2013.
六、毕业论文﹙设计﹚的进度安排:
3月2日——3月29日:
查阅资料,完成初步设计方案和开题报告。
4月1日——4月26日:
根据POP3邮件收发系统的工作原理,给出设计方案,及软件流程图。
4月29日——5月24:
并在软件环境下进行运行调试,进一步完善系统功能,整理资料;
5月27日——6月7日:
撰写、修改毕业设计论文。
6月10日——6月15日:
打印论文准备并完成答辩。
指导教师签名系(教研室)主任签名
专业负责人签名批准日期
基于POP3的邮件收发系统的设计与实现
陈新鹏
(陕西理工学院物理与电信工程学院电子信息工程专业,2012级1班,陕西汉中723000)
指导教师:
李菊叶
[摘要]电子邮件是互联网基础服务中重要的一部分。
从互联网在上世纪90年代开始逐步发展之时到今天信息极大丰富的互联网2.0时代,实现电子邮件POP3收取都有重要的意义。
本设计使用VisualStudio2010作为开发平台,使用WindowsSocket2应用程序接口,实现了一个具有POP3邮件接收和保存功能的计算机邮件接收程序,同时介绍了POP3邮件接收协议、base64解码方法和基于Windows下VisualC++的程序设计以及实现的方法。
[关键字]电子邮件;
POP3协议;
Winsock2;
VisualC++
DesignandimplementationofanE-mailsystembasedonPOP3protocol
ChenXinpeng
(Grade12,Class01,MajorelectronicsandinformationengineeringSchoolofPhysicsandTelecommunicationEngineering,ShaanxiUniversityofTechnology,Hanzhong723000,Shaanxi)
Tutor:
LiJuye
Abstract:
E-mailisanimportantpartofbasicInternetservice.FromthebeginningoftheprogressivedevelopmentoftheInternetinthe1990s,tothegreatwealthofinformationintheInternet2.0eratoday,achieveingthee-mailPOP3chargealwaysisanimportantsignificance.ThisdesignusesVisualStudio2010asthedevelopmentplatform,usingtheWindowsSocket2applicationprograminterface,achievedacomputermailreceivingprogramwhichhavingaPOP3mailreceivingandstoringfunctionwiththePOP3mailreceivingprotocolwhichbasedonWindowsunderVisualC++programmingandmethodsofimplementation.
Keywords:
E-mail;
POP3protocol;
VisualC++
目录
1.引言 1
1.1背景 1
1.2研究目的 1
1.3开发环境及语言 1
1.3.1开发环境 1
1.3.2开发语言 2
1.4WinSock2简介 3
2.POP3协议与传输标准 5
2.1POP3状态简述 5
2.1.1认证(Authorization)状态 5
2.1.2事务(Transaction)状态 6
2.1.3更新(Updata)状态 7
2.2Base64标准 8
2.2.1BASE64编码 8
2.2.2BASE64解码 9
2.3中文字符编码标准 9
2.3.1GB2312字符集 9
2.3.2GBK字符集 9
2.3.3UNICODE编码 9
3.系统流程和规划 10
3.1主程序总体设计 10
3.2POP3执行流程 11
3.3BASE64解码流程 13
3.3.1主题与发件人解码 13
3.3.2邮件正文解码 14
3.4邮件保存流程 15
4.POP3邮箱的C++实现 17
4.1TCP发送接收的实现 17
4.1.1发送函数的C++封装 17
4.1.2接收函数的C++封装 17
4.2POP3协议命令的实现 18
4.2.1认证状态C++实现 18
4.2.2事务状态C++实现 18
4.2.3更新状态C++实现 18
4.3Base64的C++解码实现 19
4.3.1BASE64块解码 19
4.3.2BASE64文本解码 19
4.3.3BASE64解码邮件主题 20
5.软件测试 21
结束语 23
致谢 24
参考文献 25
附录A:
26
附录B:
44
ii
1.引言
电子邮件(electronicmail简称E-mail)是指用电子方式传送的信件。
其中也可能包括多媒体信息,包括图片、音乐、视频等等。
电子邮件是基础互联网服务之一,从古老的阿帕网开始算起,尽管目前互联网发展已经有将近50年,电子邮件诞生也超过45年,但是电子邮件始终是最为广泛应用的,也是最为可靠的信息传送方式之一。
电子邮件不仅可以用来发送接收普通文本信件消息,现代的电子邮件多数都是基于html超文本标记语言的,通过在支持这一协议的客户端或者网页端打开邮件,用户能感受到和最简单的文本邮件完全不一样的体验。
它甚至可以让用户免费得到大量的多媒体信息,通过邮件订阅,用户也可能得到免费新闻和专题报道等等内容。
电子邮件由于其优越的特性,在上世纪上网仍然需要拨号的时代就开始广为流行,并在国内获得了“伊妹儿”这一昵称。
网民对其喜爱程度可见一斑。
电子邮件的蓬勃发展和其C/S结构是分不开的,邮件服务只要求服务器长时间在网,客户端完全可以脱离网络,只在接收发送邮件的短时间内才连接网络,这种特性大大降低了早期互联网发送邮件的费用。
任何服务器和客户端之间的连接都需要通过协议支持才能完成,而POP3协议("
PostOfficeProtocol-Version3,邮局协议版本3)就是支撑这种特性实现的基础。
通过这一技术,用户可以只在很短的时间内联网,就可以下载大量邮件并且离线阅读,节省了互联网初期用户的费用开支的同时,也极大的丰富了人民的网络信息生活。
1.1背景
电子邮件曾经是网络上最主要的通信方式,从1971年诞生开始,电子邮件就开始改变了人们的信息交流方式。
1987年9月份,CANET在北京计算机应用技术研究所内正式建成了中国第一个国际互联网电子邮件节点,并在9月14日发出了中国第一封电子邮件。
这一事件标志着中国人使用互联网的历史拉开了序幕,可见电子邮件系统在互联网时代的重要性绝非其他互联网服务可以相提并论的。
到了21世纪,在即时通信和社交网络的冲击下,关于电子邮件是否仍然有必要存在的争论开始进入人们的视线,但是电子邮件作为商务交流和网络账号注册中不可或缺的一部分,电子邮件现在仍然在全球范围内拥有众多用户。
计算机网络并无国界,和即时通讯充满竞争并且协议不公开的现状不同,电子邮件协议统一并且可以轻松发往国外,这也使电子邮件更为适合国际化环境下的应用。
自从谷歌提供免费GB级别的谷歌邮箱开始,多数互联网邮件提供商都开始了免费化服务,邮件存储空间扩大,删除邮件也变得不再是必须的。
而用户发送电子邮件成本几乎为0,低成本的邮件发送服务也使得垃圾邮件一度十分猖獗。
近年来,电子邮件技术日趋成熟,已经开始了从以提供和保证邮箱基础服务为主的POP3/SMTP协议向以提供安全邮件信息服务为特征的SSL/IMAP协议过渡。
作为全世界使用最广泛的通信方式之一,电子邮件的开放性极大地方便了各地网民的信息交流,及资源的共享。
1.2研究目的
虽然现在绝大多数邮件服务商都有网页版本的邮件服务端,但是对于网络收到资费限制的地方,或者处理能力有限的嵌入式设备,POP3协议相比网页端都是更加适合这些应用环境的。
同时,众多软件内部都包含邮件接收系统,比如有些软件的bug反馈就是通过客户端内置的SMTP服务向服务器发送bug反馈邮件,在服务端查看邮件的时候就可能需要使用到pop3协议。
因此清楚POP3协议并且使用C++语言实现协议执行功能,仍然是十分有必要的。
1.3开发环境及语言
本文中POP3邮箱使用VisualStudio2010开发环境,使用C++语言编写程序代码。
1.3.1开发环境
VisualStudio可以用来创建Windows平台下的Windows应用程序。
VisualStudio2010相比VC++6.0具有新外观和新功能,功能也更加强健。
VC++6.0发布于1998年,当时主流系统还是Windows95/98,尽管后来发布了SP6补丁包,但是对新的操作系统支持仍然很不够。
1998年时C++语言也没有统一标准,C++第一个标准是1999年发布的,所以导致VC++6.0语法和相当一部分编译器不兼容。
而这些问题在VisualStudio2010中都没有出现。
VisualStudio2010是微软在2010年推出的多语言编译器,可以支持C/C++,C#,VisualBasic等一系列语言。
同时部分支持C++0x标准,对于新的语言特性有更好的支持的同时,也更加符合现代程序开发流程,团队化合作非常方便。
并且可以支持新的操作系统,Windows7等NT6.0以上的系统和WindowsXP都能完美支持,并且开发的程序安全性能更好。
但是相对于VC++6.0,VisualStudio2010国内教材和书籍更少,因此学习成本也更大。
为了实现完整的邮箱功能,更加符合现代化操作系统程序开发,本文中选择使用VisualStudio2010作为设计开发平台。
VisualStudio2010包含很多完全集成的工具。
这些工具可以使编写C++程序的过程变得十分轻松。
作为IDE 的一部分,VisualStudio2010提供了编辑器,编译器,链接器和库。
这些都是编写C++程序所需要的基本工具[1]。
他们的功能如下:
1)编辑器:
编辑器给用户提供了创建和编写C++代码的环境。
除了常见的文本操作功能,比如复制粘贴等等,编辑器一般还提供语言元素高亮这一功能。
它可以自动识别C++语言当中的关键字,并且按照分类给这些关键字着不同的颜色,这一功能使得代码的可读性更加好,并且当程序员拼错关键词时,编译器会给出清楚的提示。
2)编译器:
编译器可以将编辑器编辑后的源代码转换为目标代码,并且在这个过程当中检测代码错误。
代码错误包括无效的或者不能被识别的代码,或者代码结构错误(比如代码永远不会被执行到,代码缺少了大括号等等)。
编译器输出的目标代码存储在目标文件当中,在VisualStudio当中,目标文件是obj格式的。
3)链接器:
链接器根据编译器输出的obj目标代码生成各种模块。
从程序库当中添加所需代码模块之后将所有模块组合成可以执行的可执行文件。
链接器也会检测和报告错误,这些错误一般是程序缺少了某个模块,或者程序当中使用了不存在的库文件,等等。
4)库:
库并不只是预先写好的示例代码集合,它更是经过专业制作的标准代码,可以扩展并且支持C++语言的特性。
这些代码经常整合到用户的程序中,来执行非常常见的功能[2]。
VisualStudio2010提供了本论文当中必不可少的标准库,比如IO流,顺序容器,字符串。
关联容器等等。
1.3.2开发语言
本文使用C++语言作为程序开发语言。
C语言始于1972年,在1983年,贝尔实验室的BjarneStrou-strup发明了一种基于C语言的扩充和完善版本的语言:
C++。
C++面向对象,并且继承了C语言的高效率,这使得C++很快推广了起来并且获得了成功。
C++经历了33年的打磨时间的打磨,其在工业界的地位已经相当稳固,在很多领域里已经是不可取代也没有必要取代的统治者。
C++具有非常好的跨平台特性,并且具有足够高的效率。
这对于计算机网络编程而言,这两者都非常重要。
因为因特网并不区分接入设备的操作系统,无论是Windows系列的WindowsXP,Windows7,WindowsServer还是POSIX系列的Linux,UNIX,以及基于这两者的众多安卓移动设备,苹果Pad等,都要能接入互联网。
众多的设备底层完全支持C++,这为程序的可移植性提供了保证。
而效率是另外一方面。
计算机网络要求具有低延迟的连接特性,因此效率必须足够,这一点C++也可以保证。
因此C++完全具备开发网络应用程序的一切特性。
C++语言是一门充满活力的编程语言。
它不仅跨平台,具有强大的功能,极高的效率,在此同时还能保持语言进化相当的活力。
从C++标准1998年版本到C++2011年版本的,C++正在变成一门完美的程序设计语言。
原来版本当中来不及引入的内容,以及语言机制中发现的一些缺陷,都在新的版本当中得以弥补和发展。
比如新版标准当中引入了无序容器,以弥补原版标准中对hash容器的缺陷。
新版本标准支持移动构造函数和移动赋值运算符,以减小特定场合下对象拷贝的性能开销。
新版本标准不但在语法上增加了大量特性,而且在标准库当中引入了大量设施,这不光使得标准库对于C++语言的重要性远超从前[3],也使得“重复造轮子”,尤其是制造低级轮子这种事情在C++语言界变成上一个时代的事情。
1.4WinSock2简介
C++网络编程在不同的操作系统上需要不同的编程规范。
WinSock规范就是Windows下为编写通用TCP/IP应用程序提供的一个强大且可扩展的API。
程序员可以使用一个基于WindowsSockets规范的WindowsSockets来实现创建任何类型的TCP/IP客户端或者服务器应用程序。
WindowsSockets规范有两个主要版本,1.1版本和2版本。
WindowsSockets规范1.1版本的作者试图限制WinSock的范围以促进WinSock的发展和成功。
这一目标确实达成了,WindowsSocket1.1仅仅支持TCP/IP协议,它对其他的协议并没有提供支持。
同时WindowsSocket1.1仅仅能创建一个活跃的dll,这种特性也限制了这一版本的灵活性。
因此可见,WindowsSocket1.1主要提供的是针对TCP/IP协议,单一活跃dll而设计的。
而WindowsSockets规范2.0版本正式为一系列其他协议提供了API支持,并且允许他们同时存在。
WindowsSockets2也增加了一些具有实质功能的新函数。
并且,最重要的一点是,WindowsSockets两个版本之间是兼容的,原来基于WinSock1.1的应用程序可以不用修改直接在WindowsSockets2上运行。
这对于原本基于WinSock1.1开发的应用程序是非常重要的,平滑升级的同时也可以完全享受到WindowsSockets2带来一系列新特性和更高的效率提升。
[4]
WindowsSockets2相比WindowsSockets1.1具有很多让人印象深刻的新特性。
这些新特性所涉及的面积很广泛,具体可以包括以下几种分类:
1)多协议支持:
新版本支持更多协议,可以方便用户二次开发
2)分散和聚合:
新的协议版本对发送和接收提供了更多的缓冲器支持
3)重叠I/O:
应用使用异步I/O的时候提高了应用程序的执行效率
4)QoS支持:
WinSock2支持控制流量规范并且可以接收当其变化时的通知。
5)Socket分组:
通过对Socket的属性进行分组,并且支持按照分组设置优先级。
6)多点和多播:
可以有选择性的发送数据,通过多播将数据发送到多个目标。
7)接受条件控制:
根据协议连接与断开的变换中发送接收正常数据之外的其他数据。
8)进程级别的Socket共享功能:
可以在一个或者多个进程中共享Socket。
WindowsSocket2API的数量和WinSock1.1相比,其函数数量多了几乎一倍之多。
不同于仅支持单一活跃dll的WinSock,WinSock2同时可以在同一台计算机上面提供多个WinSocket,这让其灵活性大大增加,同时WinSock2增加了架构的灵活性,多个协议栈和接口仅仅使用一个顶层dll就可以完成所有的功能。
WinSockAPI通过标准化服务提供接口与服务提供商进行交流,并且能够同时多进程的在多个服务提供商之间进行对话。
下图展示了WindowsSockets2架构的简单描述[5]:
WindowsSockets1.1应用程序
WindowsSockets2应用程序
WinSock1.1API
WinSock.dll(16位)WSOCK32.dll(32位)
WinSock2API
WinSock2服务提供商接口
WS2-32.dll
(32位)
附加传输
服务提供商
SPX/IPX等
基于TCP/IP
域名解析
网页空间
TCP/IP
传输
服务
提供商
图1.1WindowsSocket2的WOSA架构示意图
2.POP3协议与传输标准
POP3协议用来支持客户端远程管理服务器上面的电子邮件。
这个协议允许用户连接到远程服务器之后,将邮件保存到本地计算机上,然后删除在服务器上的邮件副本。
这个协议是在RFC-1939当中定义的。
POP3协议采用Client/Server工作模式。
POP3服务器遵循POP3协议,始终保持在线来接收其他电子邮箱发送过来的邮件,而POP3客户端则负责和POP3服务器连接,在这之后,下载在服务器端的邮件。
在默认配置下,该协议使用TCP连接,110端口进行访问。
POP3协议是一个并不复杂的协议,因此很多人们熟悉的功能在这个协议当中并没有直接实现。
比如查看收到了多少封新邮件,恢复之前被删除的邮件等等功能。
这些功能需要软件自己记住之前接收的邮件,然后通过计算得出新邮件到底有哪些才能完成任务。
这一特性有些像RISC架构——通过实现一些最简单和最常用的功能,对这些功能进行复杂组合之后,就可以实现更高的复杂性才能完成的任务,而且效率也很高。
2.1POP3状态简述
POP3协议通过一系列命令,使得服务器和客户端之间建立连接并登录,之后传送邮件等等。
POP3本身命令并没有很多,只包含了最基本的一些功能,如登录认证,下载邮件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 POP3 邮件 收发 系统 设计 实现