电子邮件系统的设计与开发byqa.docx
山东农业业大学毕业论文文题目:电电子邮件件系统的的设计与与开发院部信息学院专业班级计算机科学与技术 04级7班届次2008届学生姓名李康男学号2004160839指导教师姜红花二八八年六月月中英文摘摘要第一章 电电子邮件件的发展展背景和和意义电子邮件件翻译自自英文的的E-maail,它它表示通通过电子子通讯系系统进行行信件的的书写、发发送和接接收。330多年前,人们发发明了电电子邮件件这种便便捷的信信息传递递方式,这是人人类通信信历史上上的一次次革命。电子邮件的兴起是在20世纪80年代,70年代的沉寂主要是因为当时使用Arpanet网络的人太少,网络的速度也仅为目前56Kbps标准速度的二十分之一。受网络速度的限制,那时的用户只能发送些简单的信息,根本无法象现在这样发送大量照片;到80年代中期,个人电脑兴起,电子邮件开始在电脑迷以及大学生中广泛传播开来;到90年代中期,随着计算机技术的发展,出现了功能强大的Internet。在Internet众多的服务功能中,电子邮件E-mail就是其强大功能中的一个。自此,电子邮件被广为使用。今天使用用的最多多的通讯讯系统是是互联网网,同时时电子邮邮件也是是互联网网上最受欢迎迎的功能能之一。通通过电子子邮件系系统,您您可以用用非常低低廉的价价格,以以非常快快速的方方式,与与世界上上任何一一个角落落的网络络用户联联络系,这这些电子子邮件可可以是文文字、图图象、声声音等各各种方式式。同时时,您可可以得到到大量免免费的新新闻、专专题邮件件,并实实现轻松松的信息息搜索。这这是任何何传统的的方式也也无法相相比的。正正是由于于电子邮邮件的使使用简易易、投递递迅速、收收费低廉廉,易于于保存、全全球畅通通无阻,使使得电子子邮件被被广泛地地应用,它它使人们们的交流流方式得得到了极极大的改改变。随着网络络越来越越普及,现现在已经经是人人人一个电电子邮箱箱甚至有有多个电电子邮箱箱。在IInteerneet上使使用最多多的服务务当属电电子邮件件服务了了。可见见,电子子邮件与与人们的的工作、学学习和生生活息息息相关,它它已经深深深的融融入到每每个人的的生活中中,生活在这个个网络时时代的人人是不可可能没有有电子邮邮箱的。电电子邮箱箱已经由由以前科科技工作作者用于于科技信信息交流流转变到到现在大大多数人人用来进进行日常常生活工工作学习习的交流流工具。同同时,电电子邮箱箱的功能能也发生生了翻天天覆地的的变化。由由原来只只能收发发文本到到现在的的收发多多媒体文文件。简简化邮件件的编码码,减少少编码造造成的数数据冗余余。这些些都得宜宜于与电电子邮箱箱有关的的网络协协议的发发展和有有关硬件件的改进进。现在我们们每天都都习惯于于通过EE-maiil进行行交流,各各大网站站也几乎乎都推出出了自己己的基于于WEBB的免费费邮件系系统。电电子邮件件已无可可争议的的地成为为互联网网上最受受用户欢欢迎的服服务。邮邮件的安安全也逐逐渐受到到人们的的重视。至至今已出出现了各各种安全全保障措措施来加加强E-maiil的安安全性。随随着电子子邮件服服务的完完善和安安全性的的不断提提高。电电子邮件件毫无疑疑问将在在人类的的通信史史上占有有一席之之地。如如同其他他的网络络服务,电电子邮件件系统也也有其使使用的传传输协议议,包括括SMTTP(Simmplee Maail Traansffer Prootoccol,简简单邮件件传输协协议)、POP(Post Office Protocol,邮局协议)和IMAP(Internet Message Access Protocal)消息访问协议)等,这些协议应用于电子邮件的发送和接收。一些邮件处理软件如OutLook Express和FoxMail等就是按照SMTP和POP3 协议结合Windows Sockets套接字进行设计来收发邮件的。第二章 电子邮件件收发原原理及相相关技术术本章简单单介绍了了SMTTP协议议,POOP3协协议的工工作原理理。只有有较深入入的掌握握了这两两个协议议的主要要内容,才能理理解基于于SMTTP,PPOP33的邮件件收发系系统是怎怎样工作作。2.1 SMTTP协议议简介2.1.1 SSMTPP协议原原始命令令码和工工作原理理SMTPP(Siimplle MMaill Trranssferr Prrotoocoll)即简简单邮件件传输协协议,它它是一组组用于由由源地址址到目的的地址传传送邮件件的规则则,或者者说是由由它来控控制信件件传输的的一种中中转方式式。SMMTP协协议属于于TCPP/IPP协议族族,它帮帮助每台台计算机机在发送送或中转转信件时时找到下下一个目目的地。通通过SMMTP协协议所指指定的服服务器,我我们就可可以把EEmaiil寄到到收信人人的服务务器上了了,整个个过程只只要几分分钟。SSMTPP服务器器则是遵遵循SMMTP协协议的发发送邮件件服务器器,用来来发送或或中转电电子邮件件。(1)SSMTPP协议的的通信模模型首先针对对用户发发出的邮邮件请求求,由发发送SMMTP建建立一条条连接到到接收SSMTPP的双工工通讯链链路,这这里的接接收SMMTP是是相对于于发送SSMTPP而言的的,实际际上它既既可以是是最终的的接收者者也可以以是中间间传送者者。发送送SMTTP负责责向接收收SMTTP发送送SMTTP命令令,而接接收SMMTP则则负责接接收并反反馈应答答。文件系统发送SMTP接受SMTPSMTPP命令邮件内容容文件系统用户应答图2-11 SMMTP协协议通信信模型示示意图(2)SSMTPP协议的的命令和和应答从前前面的通通讯模型型可以看看出SMMTP协协议在发发送SMMTP和和接收SSMTPP之间的的会话是是靠发送送SMTTP的SMTTP命令令和接收收SMTTP反馈馈的应答答来完成成的。在在通讯链链路建立立后,发发送SMMTP发发送MAAILFFROMM:命令令指令邮邮件发送送者,若若接收SSMTPP此时可可以接收收邮件则则作出OOK的应应答,然然后发送送SMTTP继续续发出RRCPTT命令以以确认邮邮件是否否收到,如如果接收收到就作作出OKK的应答答,否则则就发出出拒绝接接收应答答,但这这并不会会对整个个邮件操操作造成成影响。双双方如此此反复多多次,直直至邮件件处理完完毕。SSMTPP协议共共包含110个SMTTP命令令,列表表如下:-表2-11 SMMTP命命令命令令说明-HELLLO dommainnCRRLF识别发发送方到到接收SSMTPP的一个个HELLLO命命令MAILL FRROM:revversse-ppathhCRRLFrevversse-ppathh为发送送者地址址。此命命令告诉诉接收方方一个新新邮件发发送的开开始并对对所有的的状态和和缓冲区区进行初初始化。此此命令开开始一个个邮件传传输处理理最终完完成将邮邮件数据据传送到到一个或或多个邮邮箱中。RCPTT TOO:forrwarrd-ppathhCRRLF标识各各个邮件件接收者者的地址址DATAA CRLLF接收SMMTP将将把其后后的行为为看作邮邮件数据据去处理理,以CRLLF.CRLLF标标识数据据的结尾尾。RESTT CRLLF退出/复位当当前的邮邮件传输输NOOPP CRLLF要求接接收SMMTP仅仅做OKK应答。(用用于测试试)QUITTCRLLF要求接接收SMMTP返返回一个个OK应答答并关闭闭传输。VRFYY strringgCRLLF验证指指定的邮邮箱是否否存在,由由于安全全因素,服服务器多多禁止此此命令。EXPNN strringgCRLLF验证给给定的邮邮箱列表表是否存存在,扩扩充邮箱箱列表,也也常禁止止使用。HELPP CRLLF查询服服务器支支持什么么命令VRFYY CRLLF用于验验证给定定的用户户邮箱是是否存在在,以及及接收关关于该用用户的详详细信息息。EXXPN CRLLF用于扩扩充邮件件列表。-注:CRLF为回车、换行,ASCII码分别为13、10(十进制)。- MAAILFFROMM命令中中指定的的地址是是称作envveloopeffromm地址,不不需要和和发送者者自己的的地址是是一致的的。RCCPTTTO与与之等同同,指明明的接收收者地址址称为eenveeloppetoo地址,而而与实际际的too:行是是什么无无关。邮邮件被分分为信封封部分,信信头部分分和信体体部分eenveeloppefrrom,envveloopetto与与messsaggefrrom:,meessaagetto:完完全不相相干。eevneeloppe是由由服务器器主机间间SMTTP后台台提供的的,而mmesssageefroom/tto是由由用户提提供的。有有无冒号号也是区区别。SSMTPP协议的的每一个个命令都都会返回回一个应应答码,应应答码的的每一个个数字都都是有特特定含义义的,如如第一位位数字为为2时表示示命令成成功;为为5表失败败;3表没有有完成。一一些较复复杂的邮邮件程序序利用该该特点,首首先检查查应答码码的首数数字,并并根据其其值来决决定下一一步的动动作。下下面将SSMTPP的应答答码列表表如下:-表2-22 应答码码说明-5011 参参数格式式错误502 命令令不可实实现503 错误误的命令令序列504 命令令参数不不可实现现211 系统统状态或或系统帮帮助响应应214帮帮助信息息220 dommainn服务务就绪221 dommainn服务务关闭421 dommainn服务务未就绪绪,关闭闭传输信信道250 要求求的邮件件操作完完成251 用户户非本地地,将转转发向forrwarrd-ppathh450 要求求的邮件件操作未未完成,邮邮箱不可可用(例例如,邮邮箱忙)550 要求求的邮件件操作未未完成,邮邮箱不可可用(例例如,邮邮箱未找找到,或或不可访访问)451 放弃弃要求的的操作;处理过过程中出出错551 用户户非本地地,请尝尝试fforwwardd-paath452 系统统存储不不足,要要求的操操作未执执行552 过量量的存储储分配,要要求的操操作未执执行553 邮箱箱名不可可用,要要求的操操作未执执行354 开始始邮件输输入,以以".""结束554 操作作失败(3)SSMTPP协议工工作原理理SMTPP协议规规定的命命令是以以明文方方式进行行的。SSMTPP工作在在两种情情况下:一是电电子邮件件从客户户机传输输到服务务器;二二是从某某一个服服务器传传输到另另一个服服务器。SMTP是个请求/响应协议,命令和响应都是基于ASCII文本,并以CR和LF符结束。响应包括一个表示返回状态的三位数字代码。SMTP服务器在TCP协议25号端口监听连接请求。连接和发送过程如下: a.建立TCP连接 b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。 c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行。服务器端则表示是否愿意为收件人接受邮件。 d.协商结束,发送邮件,用命令DATA发送。 e.以.表示结束输入内容一起发送出去。 f.结束此次发送,用QUIT命令退出。2.1.2 SMTP协议的会话流程在进进行程序序设计之之前有必必要弄清清SMTTP协议议的会话话流程,其其实前面面介绍的的内容已已经可以以大致勾勾勒出用用SMTTP发送送邮件的的框架了了,对于于一次普普通的邮邮件发送送,其过过程大致致为:先先建立TTCP连连接,随随后客户户端发出出HELLLO命命令以标标识发件件人自己己的身份份,并继继续由客客户端发发送MAAIL命命令,如如服务器器应答为为"OKK",可可继续发发送RCCPT命命令来标标识电子子邮件的的收件人人,在这这里可以以有多个个RCPPT行,而而服务器器端则表表示是否否愿意为为收件人人接受该该邮件。在在双方协协商结束束后,用用命令DDATAA将邮件件发送出出去,其其中对表表示结束束的"."也一一并发送送出去。随随后结束束本次发发送过程程,以QQUITT命令退退出。下下面通过过一个实实例,从从lanngruuissohuu.coom发送送邮件到到rennpinngssinaa.coom来更更详细直直观地描描述此会会话流程程:(S;SSENDDER RR:REECIEEVORR)s: 建建立连接接R:2220 ssinaa.coom SSimpple Maiil TTrannsfeer SServvicee Reeadyy S:HEELLOO m /客户户端发出出HELLLO命命令以标标识发件件人自己己的身份份R:2550 ssinaa.coomS:MAAIL FROOM:lanngruuissohuu.coom /客户端端发送MMAILL命令R:2550 OOK /2550 要要求的邮邮件操作作完成S:RCCPT TO:rennpinngssinaa.coom /发发送RCCPT命命令来标标识电子子邮件的的收件人人,在这里里可以有有多个RRCPTT行R:2550 OOK /2550 服服务器端端则表示示是否愿愿意为收收件人接接受该邮邮件S:DAATA /命令令DATTA将邮邮件发送送出去R:3554 SStarrt mmaill innputt;ennd wwithh "CRLLF.CRLLF"S: BBlahh bllah blaah.S: .等等等S: <<CRLLF>.<CRRLF>>R:2550 OOKS:QUUITR:2221 ssinaa.coom SServvicee cllosiing traansmmisssionn chhannnel 2.2 POPP3协议议2.2.1 PPOP33协议用用于电邮邮接收的的工作模模式和原原理POP的的全称是是 Poost Offficee Prrotoocoll,即邮局局协议,用于电电子邮件件的接收收,它使用用TCPP的1100端口。现现在常用用的是第第三版,所所以简称称为 PPOP33。POPP3仍采采用Clliennt/SServver工工作模式式,Clliennt被称称为客户户端,SServver是是服务器器端。应应用层协协议建立立在网络络层协议议之上,相相应的软软件会调调用应用用层的相相应协议议。如当当打开FFoxmmaill这个邮邮件软件件收取邮邮件时,Foxmail这个软件就会调用TCP/IP参考模型中的应用层协议-POP协议。POP这个应用层的协议会指挥TCP协议,利用IP协议将一封大邮件拆分成若干个数据包在Internet上传送。(1)PPOP33标准命命令这个协议议只包含含12个命命令(其其中有33个完全全可以忽忽略它们们的存在在)。这这些命令令被客户户端计算算机用来来发送给给远程服服务器。反反过来,服服务器返返回给客客户端计计算机两两个回应应代码。POP33命令由由一个命命令和一一些参数数组成。所所有命令令以一个个CRLLF对结结束。命命令和参参数由可可打印的的ASCCII字字符组成成,它们们之间由由空格间间隔。命命令一般般是三到到四个字字母,每每个参数数却可达达40个字字符长。POP33服务器器响应由由一个状状态码和和一个可可能跟有有附加信信息的命命令组成成。不同同服务器器的回应应会有所所不同,但但开头部部分都是是一样的的所有响响应也是是由CRRLF对对结束。现现在有两两种状态态,"确定"("+OOK")和"失败"("-EERR"")。-表2-33 PPOP33标准命命令(2) POPP工作原原理简介介下面面简单介介绍一下下电子邮邮件软件件收取电电子邮件件的过程程,一般我我们在电电子邮件件软件的的账号属属性上设设置一个个POPP服务器器的URRL(UUnifformm Reesouurcee Loocattor )(比比如m),以及及邮箱的的账号和和密码。当当我们按按下电子子邮件软软件中的的收取键键后,电电子邮件件软件首首先会调调用DNS(DDomaain Namme SServver)协议对对POPP服务器器进行解解析IPP地址,当当IP地址址被解析析出来后后,邮件件程序便便开始使使用TCCP协议议连接邮邮件服务务器的1110端端口,因因为POOP服务务器是比比较忙的的,所以以在这个个过程中中我们相相对要等等比较长长的时间间。当邮邮件程序序成功地地连上PPOP服服务器后后,其先先会使用用USEER命令令将邮箱箱的账号号传给PPOP服服务器,然然后再使使用PAASS命命令将邮邮箱的账账号传给给服务器器,当完完成这一一认证过过程后,邮邮件程序序使用SSTATT命令请请求服务务器返回回邮箱的的统计资资料,比比如邮件件总数和和邮件大大小等,然然后LIIST便便会列出出服务器器里邮件件数量。然然后邮件件程序就就会使用用RETTR命令令接收邮邮件,接接收一封封后便使使用DEELE命命令将邮邮件服务务器中的的邮件置置为删除除状态。当当使用QQUITT时,邮邮件服务务器便会会将置为为删除标标志的邮邮件给删删了。通通俗地讲讲,邮件件程序从从服务器器接收邮邮件,其其实就是是一个对对话过程程,POOP协议议就是用用于电子子邮件的的一门语语言。(3) POPP3会话话的3个个状态 a.""确认"状态首先TCCP连接接由POOP3客客户打开开,POOP3服服务器发发送一个个单行的的确认。这这个消息息可以是是由CRRLF结结束的任任何字符符。例如如,它可以以是:S:+OOKPOOP3sservverrreaddy此时时POPP3会话话就进入入了"确认"状态。此此时,客客户必须须向服务务器证明明它的身身份。在在此介绍绍两种可可能的处处理机制制,一种种是USSER和和PASSS命令令,另一一种是在在后面要要介绍的的APOOP命令令用USSER和和PASSS命令令进行确确认过程程,客户户必须首首先发送送USEER命令令,如果果POPP3服务务器以""确认"状态码码响应,客客户就可可以发送送PASSS命令令以完成成确认,或或者发送送QUIIT命令令终止PPOP33会话。如如果POOP3服服务器返返回"失败"状态码码,客户户可以再再发送确确认命令令,或者者发送QQUITT命令。当客客户发送送了PAASS命命令后,服服务器根根据USSER和和PASSS命令令的附加加信息决决定是否否允许访访问相应应的存储储邮件。一一旦服务务器通过过这些数数据决定定允许客客户访问问储存邮邮件,服服务器会会在邮件件上加上上排它锁锁,以防防止在进进入"更新"状态前前对邮件件的改变变。如果果成功获获得了排排它锁,服服务器返返回一个个"确认"状态码码。会话话进入""操作状状态",同时时没有任任何邮件件被标记记为删除除。如果果邮件因因为某种种原因不不能打开开(例如如,排它它锁不能能获得,客客户不能能访问相相应的邮邮件或者者邮件不不能进行行语法分分析),服服务器将将返回""失败"状态码码。在返返回"失败"状态码码后,服服务器会会关闭连连接。如如果服务务器没有有关闭连连接,客客户可以以重新发发送确认认命令,重重新开始始,或者者发送QQUITT命令。在服务器器打开邮邮件后,它它为每个个消息指指定一个个消息号号,并以以八进制制表示每每个消息息的长度度。第一一个消息息被指定定为1,第二二个消息息被指定定为2,以此此类推,第第N个消息息被指定定为N。在POOP3命命令和响响应中,所所以的消消息号和和长度以以十进制制表示。下下面是在在"确认"状态中中可用的的命令:USERR uuserrnamme;PASSS ppasssworrd; QUIITb."操操作"状态一旦旦客户向向服务器器成功地地确认了了自己的的身份,服服务器将将锁住并并打开相相应的邮邮件,这这时POOP3会会话进入入"操作"状态。现现在客户户可以重重复下面面的POOP3命命令,对对于每个个命令服服务器都都会返回回应答。最最后,客客户发送送QUITT命令,会会话进入入"更新"状态。下下面是在在"操作"状态中中可用的的命令:STAAT;LISSTmssg;RETTRmssg;DELLEmssg;NOOOP;RSEET; TOOPmssgn;UIDDLmmsgc."更更新"状态当客客户在""操作"状态下下发送QQUITT命令后后,会话话进入""更新"状态。(注注意:如如果客户户在"确认"状态下下发送QQUITT后,会会话并不不进入""更新"状态。)如如果会话话因为QQUITT命令以以外的原原因中断断,会话话并不进进入"更新"状态,也也不从服服务器中中删除任任何信件件。QUUIT在在"更新"状态有有效。; 可可选的PPOP33命令:APOPPnammediigesst在"确认"状态有有效TOPmmsgnn; UIIDLmsgg在"操作"状态有有效注:除了了STAAT,LISST和UIDDL的响响应外,其其它命令令的响应应均为""+OKK"和"-EERR""。响应应后的所所有文本本将被客客户略去去。2.2.2 PPOP33会话流流程S:<等等待连接接到TCCP端口口1100>C:<打打开连接接>S:+OOKPOOP3sservverrreaddyC:USSER ussernnameeS:+OOKC:PAASS paasswworddS:+OOKC:STTAT /请求服服务器发发回关于于邮箱的的统计资资料,如如邮件总总数和总总字节数数S:+OOK23320C:LIIST /返回邮邮件数量量和每个个邮件的的大小S:+OOK2mmesssagees(3320oocteets)S:11120S:22200S:.C:REETR11 /回由参参数标识识的邮件件的全部部文本S:+OOK.S:<服服务器发发送信件件1>S:C:DEELE11S:+OOKmeessaage11delleteedC:QUUITS:+OOKdeeweyyPOPP3seerveersiigniingooff(maiildrropeemptty)C:<关关闭连接接>S:<等等待下一一次连接接>2.3 RFCC8222简介 电子邮件件是全世世界通用用的。你你可以给给任何一一个人发发送电子子邮件而而不用考考虑他所所处的地地理位置置在哪或或他使用用的是什什么软件件作为邮邮件接受受客户端端。和其其他与IInteerneet相关关的事物物一样(或或者可以以说,与与计算机机技术相相关的事事物),电电子邮件件也是基基于一种种标准的的,而人人们把这这个特殊殊的标准准称作RRFC 8222。这个个标准早早在二十十多年前前(准确确的日期期是一九九八二年年八月十十三日)就就公布于于世,在在这期间间它基本本没有改改变。在在20001年公公布的RRFC 28222标准准取代了了RFCC 8222,但但是它的的基本内内容和RRFC 8222是完全全一致的的,只是是做了一一些很小小的更新新和改动动。而其其他的一一些邮件件标准,比比如RFFC 8850(在在USEENETT上使用用),同同样也基基于RFFC 8822标标准。(RFCC,Reequeest Forr Coommeentss)2.4 Winnsocck简介介 许多多网络程程序都是是采用SSockket套套接字实实现的,对对于一些些标准的的网络协协议如HHTTPP、FTPP和SMTTP等协协议的编编程也是是基于套套接字程程序的,只只是端口口号不再再是随意意设定而而要由协协议来指指定,比比如HTTTP端端口在880、FTPP是21,而而SMTTP则是是25。Socckett只是提提供在指指定的端端口上同同指定的的服务器器从事网网络上的的通讯能能力,至至于客户户和服务务器之间间是如何何通讯的的则由网网络协议议来规定定,这对对于套接接字是完完全透明明的。因因此可以以由Soockeet套接接字为SSMTPP提供网网络通讯讯基础,而而对于网网络通讯讯连路建建立好之之后采取取什么样样的通讯讯应答则则要按SSMTPP协议的的规定去去执行了了。本科科题为方方便起见见,没有采采用编写写较复杂杂的Wiindoows Soccketts AAPI进进行编程程,而是使使用经过过较好封封装的MMFC 的CSoockeet类。2.5 MFCC简介 MMFC (Miicroosofft FFounndattionn Cllasss Liibraary)中的各各种类结结合起来来构成了了一个应应用程序序框架,它它的目的的就是让让程序员员在此基基础上来来建立WWinddowss下的应应用程序序,这是是一种相相对SDDK来说说更为简简单的方方法。因因为总体体上,MMFC框框架定义义了应用用程序的的轮廓,并并提供了了用户接接口的标标准实现现方法,程程序员所所要做的的就是通通过预定定义的接接口把具具体应用用程序特特有的东东西填入入这个轮轮廓。MMicrrosooft Vissuall C+提供供了相应应的工具具来完成成这个工工作:AAppWWizaard可可以用来来生成初初步的框框架文件件(代码码和资源源等);资源编编辑器用用于帮助助直观地地设计用用户接口口;CllasssWizzardd用来协协助添加加代码到到框架文文件;最最后,编编译,则则通过类类库实现现了应用用程序特特定的逻逻辑。 MFCC封装了了Winn32 APII,OLEE APPI,ODBBC AAPI等等底层函函数的功功能,并并提供更更高一层层的接口口,简化化了Wiindoows编编程。同同时,MMFC支支持对底底层APPI的直直接调用用。 MMFC提提供了一一个Wiindoows应应用程序序开发模模式,对对程序的的控制主主要是由由MFCC框架完完成的,而而且MFFC也完完成了大大部分的的功能,预预定义或或实现了了许多事事件和消消息处理理,等等等。框架架或者由由其本身身处理事事件,不不依赖程程序员的的代码;或者调调用程序序员的代代码来处处理应用用程序特特定的事事件。 MFCC是C+类库,程程序员就就是通过过使用、继继承和扩扩展适当当的类来来实现特特定的目目的。例例如,继继承时,应应用程序序特定的的事件由由程序员员的派生生类来处处理,不不感兴趣趣的由基基类处理理。实现现这种功功能的基基础是CC+对对继承的的支持,对对虚拟函函数的支支持,以以及MFFC实现现的消息息映射机机制。第三章电电子邮件件系统的的设计和和开发本章首先先对SMMTP协协议,PPOP33协议的的工作流流程作了了详细的的分析,然然后按照照SMTTP和POPP3 协协议结合合Winndowws SSockketss套接字字进行设设计实现现代码并并封装成成CSMMTP协协议类和和CPOOP3协协议类。最最后根据据客户端端的基本本需求设设计成客客户端邮邮件收发发软件,并并以友好好的界面面形式呈呈现出来来。3.1 服务器器端作用用简介SMTPP,POOP3采采用Clliennt/SServver工工作模式式,Cliientt被称为为客户端端,一般我我们日常常使用电电脑都是是作为客客户端,而Serrverr(服务器器)则是网网管人员员进行管管理的。SMTP服务器的主要功能就是接收来自客户端的SMTP协议命令,然后对这些命令进行解析,根据不同的命令进行不同的处理,处理完成之后,将结果发送给客户端。图要作说说明serverclientclientclient 图33-1 Cliientt/Seerveer工作作模式示示意图以下用简简单的流流程图来来分别示示范SMMTP,POP3的服务器端与他们对应的客户端的会话: 图33-2 SMMTP会会话流程程示意图图如图示,连接和发送过程如下: a.建立TCP连接 b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。 c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行。服务器端则表示是否愿意为收件人接受邮件。 d.协商结束,发送邮件,用命令DATA发送。 e.以.表示结束输入内容一起发送出去。 f.结束此次发送,用QUIT命令退出。 图33-2 POOP3会会话流程程示意图图如图示,当邮件程序成功地连上POP服务器后,其先会使用USER命令将邮箱的账号传给POP服务器,然后再使用PASS命令将邮箱的账号传给服务器,当完成这一认证过程后,邮件程序使用STAT命令请求服务器返回邮箱的统计资料,比如邮件总数和邮件大小等,然后LIST便会列出服务器里邮件数量。然后邮件程序就会使用RETR命令接收邮件,也可在接收一封后便使用DELE命令将邮件服务器中的邮件置为删除状态。当使用QUIT时,邮件服务器便会将置为删除标志的邮件给删了。3.2 客户端端程序设设计本节主要要介绍客客户端的的实现。本本人选择择使用VVC+6.00来实现现本系统统的客户户端,VVC+6.00是使用用面向对对象语言言C+的开发发环境,更更有利于于集中精精力于主主要功能能的实现现。由图图3-22,图33-3可可以明显显看出客客户端需需完成的的任务:1发送送SMTTP命令令,处理理相应服服务器的的响应,将将邮件按按RFCC8222格式编编码并发发送。2发送送POPP3命令令,处理理相应服服务器的的响应,将将邮件按按RFCC8222格式解解码并发发送。本系统的的现实主主要使用用了CSSMTPP,CPPOP33,CmmaillMesssagge封装装类。CCSMTTP类中中的成员员函数主主要实现现发送SSMTPP命令并并处理SSMTPP服务器器响应 ,CCPOPP3的成成员函数数主要实实现发送送POPP3命令令并处理理POPP3服务务器响应应,CMMaillMesssagge实现现邮件的的编码解解码功能能。3.2.1邮件件的格式式化由于电子子邮件结结构上的的特殊性性,在传传输时是是不能当当作简单单的文本本来直接接处理的的,而必必须按照照一定的的格式对对邮件头头和邮件件体进行行格式化化处理之之后才可可以被发发送。需需要进行行格式化化的部分分主要有有:发件件人地址址、收件件人地址址、主题题和发送送日期等等。在RRFC(Reqquesst FFor Commmennts)文文档的RRFC 8222里对邮邮件的格格式化有有详尽的的说明.在本论论文中由由CMaailMMesssagee类中的的成员函函数实现现邮件的的编码解解码功能能。BOOLL EnncoddeHeeadeer();BOOLL DeecoddeHeeadeer();voidd EnncoddeBoody();voidd DeecoddeBoody();下面通过过VC+6.0按照照RFCC 8222文档档规定将将格式化化邮件的的部分编编写如下下(部分代代码):BOOLL CMMaillMesssagge:EnccodeeHeaaderr()/此函函数为邮邮件头部部编码(此处仅仅列出了了关键部部分)CStrringg sTTo;CSttrinng ssDatte;CStrringg sEEmaiil = """CSttrinng ssFriienddly = """m_ttDatteTiime = mm_tDDateeTimme.GGetCCurrrenttTimme();/ Forrmatt: MMon, 011 Juun 998 001:110:330 GGMTm_sHeeadeer.FFormmat( "FFromm: %srrn"""Too: %srrn"""Datte: %srnn""Suubjeect: %ssrn",/ Inccludde ootheer eexteensiion linnes if dessireed(LPPCTSSTR)m_ssFroom, /ssendder(LPPCTSSTR)sToo, /rreciipieentss (LPPCTSSTR)sDaate,