毕业论文基于POP3协议的电子邮件接收程序的设计.doc_第1页
毕业论文基于POP3协议的电子邮件接收程序的设计.doc_第2页
毕业论文基于POP3协议的电子邮件接收程序的设计.doc_第3页
毕业论文基于POP3协议的电子邮件接收程序的设计.doc_第4页
毕业论文基于POP3协议的电子邮件接收程序的设计.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业论文基于POP3协议的电子邮件接收程序的设计 Inter以电子邮件服务推动着人类的通信行为不断发展?邮件的接收系统。 本论文以Visual C#为开发平台?利用Socket套接字编程?实现了基于POP3协议的邮件接收程序?介绍了POP3协议的原理及电子邮件接收程序的设计与实现方法。 随着Inter/Intra的迅猛发展?电子邮件?E-Mail?已成为因特网上非常流行、非常方便的通信方式。 电子邮件技术不断进步?邮件协议也不断发展。 目前应用最广泛的电子邮件收件协议是POP3。 本文采用微软最新的.NET技术?以Visual C#为开发平台?利用Socket套接字编程开发了基于POP3协议的邮件接收程序?现对相关原理及具体设计进行讨论。 关键词课程设计?电子邮件?接收程序?POP3?Socket?Visual C#南阳理工软件学院毕业设计?论文? 31、引言随着Inter/Intra的迅猛发展?电子邮件?E-Mail?已成为因特网上非常流行、非常方便的通信方式。 电子邮件技术不断进步?邮件协议也不断发展。 目前应用最广泛的电子邮件收件协议是POP3。 本文采用微软最新的.NET技术?以Visual C#为开发平台?利用Socket套接字编程开发了基于POP3协议的邮件接收程序?现对相关原理及具体设计进行讨论。 1.1毕业设计的内容运用C#语言设计一个邮件程序实现邮件的接收1.2毕业设计的要求?1?按要求编写课程设计报告书?能正确阐述设计结果。 ?2?通过课程设计培养学生严谨的科学态度?认真的工作作风和团队协作精神。 ?3?学会文献检索的基本方法和综合运用文献的能力。 ?4?在老师的指导下?要求每个学生独立完成课程设计的全部内容。 2、设计平台简介2.1Visual C#?1?背景VC+是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用C+的一个开发平台。 VC+是Windows平台上的C+编程环境?学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、等的知识?难度比较大。 Windows下编程需要了解Windows的消息机制以及回调?callback?函数的原理?MFC是Win32API的包装类?需要理解文档视图类的结构?窗口类的结构?消息流向等南阳理工软件学院毕业设计?论文?4等?是代码共享的二进制标准?需要掌握其基本原理等等。 Visual C#作为Visual Studio的一个组件?可以通过安装Visual Studio来获得。 VC作为一个主流的开发平台一直深受编程爱好者的喜爱?但是很多人却对它的入门感到难于上青天?究其原因主要是大家对他错误的认识造成的?严格的来说VC+不是门语言?虽然它和C+之间有密切的关系,如果形象点比喻的话?可以把C+看作为一种“工业标准”?而VC+则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的前提下扩展而来的。 ?2?基本模式Visual C#应用程序的开发主要有两种模式?一种是WIN API方式?另一种则是MFC方式。 VC基于C?C+语言?主要由是MFC组成?是与系统联系非常紧密的编程工具?它兼有高级?和低级语言的双重性?功能强大?灵活?执行效率高?几乎可说VC在Windows平台无所不能。 最大缺点是开发效率不高。 ?3?适用范围【1】 1、VC主要是针对Windows系统?适合一些系统级的开发?可以方便实现一些底层的调用。 在VC里边嵌入汇编语言很简单。 2、VC主要用在驱动程序开发。 3、VC执行效率高,当对系统性能要求很高的时候?可用VC开发。 4、VC主要适用于游戏开发。 5、VC多用于单片机?工业控制等软件开发?如直接对I/O地址操作?就要用C+。 6、VC适用开发高效?短小?轻量级的组件,DLL。 比如WEB上的控件。 7、VC可以开发优秀的基于通信的程序。 8、VC可以开发高效灵活的文件操作程序。 9、VC可以开发灵活高效的数据库操作程序。 10、VC是编CAD软件的唯一选择。 包括AUTOCAD?UG的二次开发。 11、VC在多线程、网络通信、分布应用方面?VC+有不可比拟的优势。 南阳理工软件学院毕业设计?论文? 53、邮件接收协议3.1POP3简介POP3?Post OfficeProtocol Version3?即邮局办公协议?该协议用于接收邮件的双方?客户机、POP3服务器?进行通信。 使用该协议?用户可以脱机阅读信件?而不必把客户机长期连接到网络上?以减少网络费用。 POP3协议允许用户以一定的方式从保存邮件的服务器?即POP3服务器?上取走自己的邮件。 3.2POP3协议工作原理【2】POP3提供了一种客户机/服务器脱机模型?客户机通过向服务器发送一些命令来完成相应的操作。 客户机能够发送的命令与它所处的状态有关。 协议中定义了三种状态?即确认状态?Authorization State?、处理状态?Transaction State?和更新状态?Update State?。 在不同的状态下?客户机可以向服务器发送的命令是有区别的?某些命令还会导致状态的转换。 POP3交互过程中的常用命令和状态转换如图3.2.1和表3.2.1所示。 南阳理工软件学院毕业设计?论文?6图3.2.1POP3的状态转换示意图南阳理工软件学院毕业设计?论文?7表3.2.1一些常用的POP3命令POP3服务器一般使用的是TCP的110号端口。 当客户机与服务器建立TCP连接时?POP3服务器向客户机发回一个问候?交互过程即进入确认状态。 此时?若客户机提供了自己的身份并成功确认?即由确认状态转入处理状态?在这个状态?用户可用相应的命令处理自己的邮件。 在完成相应的处理过程后客户机发出QUIT命令?则进入更新状态?在此状态下?POP3服务器释放邮件资源并返回一个告别响应?最后关闭TCP连接。 通过POP3命令查询电子邮件时?客户机可以下载指定的邮件?然后对邮件进行删除或修改操作都无需与服务器进一步交互。 客户机向服务器发送命令并等待响应?POP3命令采用命令行形式?用ASCII码表示。 服务器响应是由一行或多行组成?其中?第一行以ASCII文本+OK,或-ERR开始?分别指出相应的操作是成功还是失败。 POP3命令包含一个大小写无关的关键字和一个或多个参量?所有的命令以?回车换行符?作为其结束标志。 关键字和参量必须是非控制符的ASCII码字符。 关键字和参量之间?参量和参量之间由一个空格字符分隔开。 关键字长不大于四个字符?每个参量最长可到40个字符。 POP3响应包含一个状态标志和一个跟随其后的附加信息。 响应也用南阳理工软件学院毕业设计?论文?8作为其结束标志。 响应最长到512字节?其中包括协议定义了两个状态标志?正确?“+OK”?和错误?“-ERR”?。 服务器用大写格式发送“+OK”和“-ERR”。 如果响应是多行的?则每行以结束。 当响应的所有行被发送后?接着发送多行响应的结束标志行?该行仅包含一个句点“.”和一个对【3】。 4、设计原理4.1POP3交互模型该模型基本原理为?POP3接收者对POP3发送者进行初始化连接?发送者对接收者发送询问指令“READY”,接收者则向发送者提交所要接收数据的要求?发送者做出回应?并发送数据。 接收者则开始接收数据。 发送者发送完数据后?提出断开请求?并断开连接。 数据接收过程完成。 POP3发送者R EA DY“Hello”“Mail from”“Rcpt to”“Data”(reque stto get)O K接收数据Q UI T断开连接POP3接收者初始化连接南阳理工软件学院毕业设计?论文? 95、课程设计步骤5.1函数构造Windows Socket类是对Windows SocketAPI的封装?其中包括?CSocket和cAsyncSocket类?使用它们能够大大简化网络通信程序的编写。 套接字的数据结构中包括下面五种数据: (1)本机主机端口?接收报文或数据报的进程。 (2)本机主机地址?接收数据包的主机。 (3)远地协议端口?目的进程或程序。 (4)远地主机端口?目的主机。 (5)协议?程序在网络上传输数据时使用的协议。 本应用程序就是使用Windows sockets编程设计的。 在接收电子邮件时?必然需要涉及到连接服务器?接收数据?接收响应以及断开等一系列操作?这就需要设计一个类来封装这些操作?在该应用程序中制定了一个CSMTP类。 该类的定义如下所示?#define SMTP_PORT25#define RESPONSE_BUFFER_SIZE1024class CSMTPPublic;CSMTP(LPCTSTR szSMTPServerName,UINT nPort=SMTP_PORT);virtual?CSMTP();void SetServerProperties(LPCTSTR szSMTPserverName,UINT nPort=SMTP_PORT);CString GetlastError();UINT GetPort();BOOL Disconnect();BOOL Connect();virtual BOOLFormatMAilMessage(CMailMessage*msg南阳理工软件学院毕业设计?论文?10);BOOL getMessage(CMailMessage*msg);CString GetserverHostName();Private;BOOL get_response(UINT response_expected);CString cook_body(CMailMessage*msg);CString m_serror;BOOL m_bconnected;UINT m_nPort;CString m_sSMTPServerHostName;CSocket m_wsSMTPServer;protected?virtuaI BOOLtransmit_message(CMailMessage*msg);struct response_codeUINT nResponse;TCHAR*sMessage;enum eResponseGENERIC_SUCCESS=O?CONNECT_SUCCESS?DATA_SUCCESS,QUIT_SUCCESS?LAST_RESPONSE);TCHAR*response_buf;static response_code response_table;);其中?m_sError成员代表错误信息?m_bConnected表示是否建立连接;m_bPort表示SMTP服务器所使用的端口号?m_sSMTPserverHostName表示SMTP服务器的主南阳理工软件学院毕业设计?论文?11机名(地址);m_waSMTPserver则为将与SMTP服务器建立连接的套接字对象;response_table表示由服务器返回的响应?而eResponse列举了所有可能出现的错误。 因为电子邮件有其特殊的结构?不单简单地将其作为文本进行处理。 例如?邮件必须在邮件头和邮件体后发送?而在收信时?先需要解析邮件头和邮件体?CMailMessage类是对邮件进行格式化编码的一个类【4】。 CSMTP类的构造函数如下所示:CSMTP:;CSMTP(LPCTSTR szSMTPServerName?UINT nPort)ASSERT(szSMTPServerName l=NULL);AfxSocketInit();m_sSMTPserverHostName=azSMTPServerName;m_nPort=nPort;m_bConnected=FALSE;m_sError=_T(“OK”);response_buf=NULL;在这里调用AfxsocketInit函数以初始化Window Sockets类的使用?此外还验证其他类成员是否合法?或为其赋值。 南阳理工软件学院毕业设计?论文?15void CPop3Dlg:OnBtnSave()int i;CString s;i=m_ctrList.GetCurSel();/获得指定信件的基本属性及信件内容s=pop3Socket.GetMsgStuff(i);s+=pop3Socket.GetMsgBody(i);CFileDialog dlg(FALSE);if(dlg.DoModal()=IDOK)CFile file(dlg.GetPathName(),CFile:modeCreate|CFile:modeWrite|CFile:typeBinary);file.Write(LPCSTR)s,s.GetLength();file.Close();5.2接收邮件的步骤 (1).建立与服务器的连接。 具体工作由Connect函数完成。 部分Connect函数代码如下所示:BOOL CSMTP:;Connect()if(!m_wsSMTPServer?Create()m_sError=_T(“无法创建套接字!”);delete response_buf;response_buf=NULL;return FALSE;)if(!M_wsSMTPserver?Connect(GetServerHostName()?GetPort()南阳理工软件学院毕业设计?论文?16m_sError=_T(“无法连接到服务器”);M_sSMTPserver?Close();delete response_but;response-buf=NULL;return FALSEI;if(!Get_response(CONNECT_SUCCESS)m_sError=_T(“服务器投有响应”);M_wsSMTPServer?Close();delete response_buf?response_buf=NULL;return FALSE;)sHello?Format(_T(“HELO?srn”)?local_host);m_wsSMTPServer?Get(LPCTSTR)sHello?sHello?Getlength();?2?建立连接后从服务器接收邮件。 这个工作由GetMessage函数完成。 GetMessage函数代码如下?BOOL CSMTP?GetMessage(CMailMessage*msg)if(!m_bConnected)m_sError=_T(“必须首先创建连接!”)?return FALSE;)if(FormatMailMessage(msg)=FALSE)return FALSE;)if(transmit_message(msg)=FALSE)return FALSE?)return TRUE;)前面介绍过电子邮件有其特殊的格式?在这里FormatMailMessage函数就是用于格式化邮件信息的。 Transmit_message函数将邮件进到服务器上。 部分Transmit_message函数代码如下所示?BOOL CSMTP:transmit_message(CMailMessage*msg)南阳理工软件学院毕业设计?论文?17sFrom?Format_T(“MAIL From?r?n”)?(LPCTSTR)msg一m_sFrom);M_wsSMTPServer?Get(LPCTSTR)sFrom,sFrom?GctLength();if(!Get_response(GENERIC_SUCCESS)return FALSEl;for(int i=O;iGetNumRecipients();i+)msg一GetRecipient(sEmail?sTemp?i);sTo?Format(_T(“RCPT TO;rn”)?(LPCT STR)sEmail);m_wsSMTPServer?Get(LPCTSTR)sTemp,sTemp?GetLength();Get_response(GENERIC_SUCCESS);)sTemp=_T(“DATArn”);m_wsSMTPServer?Get(LPCTSTR)sTemp?sTemp?GetLength();if(!Get_response(DATA_SUCCESS)return FALSE?m_wsSMTPserver?Get(LPCTSTR)msg一m_sHeader?g一m_sHeader?GetLength();sTemp=cook_body(msg);m_wsSMTPServer?Get(LPCTSTR)sTemp?sTemp?GetLength();sTemp=_T(“rn.rn”);m_wsSMTPServer?Get(LPCTSTR)sTemp?sTemp.GetLength();if!Get_response(GENERIC_SUCCESS)return FALSE?Return TRUE;在此函数中?首先发送MAIL命令?通知服务器收信人的邮箱地址。 然后发进RCPT命令?通知服务器发信人的邮箱地址。 需要注意的是?在有多个发信人南阳理工软件学院毕业设计?论文?18时?必须为每个发信人都发送一次RCPT命令?通知服务器将要进行邮件数据的传输。 此后?分别将邮件头和邮件体从服务器上接收下来。 这里需要注意一点?当邮件数据接收完毕后?需要额外发送一个“回车?换行回车/换行”信号?以通知邮件数据传输完毕?3?.当邮件接收完毕后?一般不需要保持与SMTP服务器的连接?而断开的工作由Disconnect函数完成。 Disconnect代码如下?BOOL CSMTP:Disconnect()BOOL ret;if(!m_bConnected)return TRUE;CString sQuit=_T(“QUITrn”);m_wsSMTPserver?send(LPCTSTR)sQuit?sQuit?GetLength();Ret=get_response(QUIT_SUCCESS);m_wsSMTPS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论