




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学学 号 号 200840420142 课课外设计论文外设计论文 题题 目目 基于 POP3 协议的电子邮件接收程序的设计 教教 学学 院院 计算机学院 专专 业业 网络工程 班班 级级 08 级 1 班 姓姓 名名 李清平 指导教师指导教师 严 伟 课外设计 论文 1 目 录 摘摘 要要 1 1 引 言 3 1 1 课程设计的内容 3 1 2 课程设计的要求 3 2 设计平台简介 3 2 1 VC 3 3 邮件接收协议 5 3 1 POP3 简介 5 4 设计原理 8 4 1 POP3 交互模型 8 5 课程设计步骤 9 5 1 函数构造 9 5 2 接收邮件的步骤 15 6 测试 19 6 1 测试目的 19 6 2 测试环境 19 6 3 测试结果 19 2011 年6月24日 课外设计 论文 2 6 4 结果分析 20 7 出现的问题及解决方法 20 7 1 设计中出现的问题 20 7 2 解决方法 20 参考文献参考文献 21 摘摘 要要 电子邮件可以使人们有效地进行电子化的数据异地交换 Internet 以电子 邮件服务推动着人类的通信行为不断发展 本文以 VC 为开发平台 利用 Socket 套接字编程 实现了基于 POP3 协议的邮件接收程序 介绍了 POP3 协议 的原理及电子邮件接收程序的设计与实现方法 随着Internet Intranet的迅猛发展 电子邮件 E Mail 已成为因特网上 非常流行 非常方便的通信方式 电子邮件技术不断进步 邮件协议也不断发 展 目前应用最广泛的电子邮件收件协议是POP3 本文采用微软最新的 NET技 术 以VC 为开发平台 利用Socket套接字编程开发了基于POP3协议的邮件接 收程序 现对相关原理及具体设计进行讨论 关键词关键词 课程设计 电子邮件 接收程序 POP3 Socket VC 课外设计 论文 3 1 引 引 言言 随着Internet Intranet的迅猛发展 电子邮件 E Mail 已成为因特网上 非常流行 非常方便的通信方式 电子邮件技术不断进步 邮件协议也不断发 展 目前应用最广泛的电子邮件收件协议是POP3 本文采用微软最新的 NET技 术 以VC 为开发平台 利用Socket套接字编程开发了基于POP3协议的邮件接 收程序 现对相关原理及具体设计进行讨论 1 1 课程设计的内容课程设计的内容 运用 VC 语言设计一个邮件程序实现邮件的接收 1 2 课程设计的要求课程设计的要求 1 按要求编写课程设计报告书 能正确阐述设计结果 2 通过课程设计培养学生严谨的科学态度 认真的工作作风和团队协作 精神 3 学会文献检索的基本方法和综合运用文献的能力 4 在老师的指导下 要求每个学生独立完成课程设计的全部内容 2 设计平台简介 设计平台简介 2 1 VC 1 1 背背景景 VC 是微软公司开发的一个 IDE 集成开发环境 换句话说 就是使用 C 的 一个开发平台 VC 是 Windows 平台上的 C 编程环境 学习 VC 要了解很多 Windows 平台的特性并且还要掌握 MFC ATL COM 等的知识 难度比较大 Windows 下编程需要了解 Windows 的消息机制以及回调 callback 函数的原 理 MFC 是 Win32API 的包装类 需要理解文档视图类的结构 窗口类的结构 课外设计 论文 4 消息流向等等 COM 是代码共享的二进制标准 需要掌握其基本原理等等 VC 作为 Visual Studio 的一个组件 可以通过安装 Visual Studio 来获 得 VC 作为一个主流的开发平台一直深受编程爱好者的喜爱 但是很多人却对 它的入门感到难于上青天 究其原因主要是大家对他错误的认识造成的 严格 的来说 VC 不是门语言 虽然它和 C 之间有密切的关系 如果形象点比喻的话 可以把 C 看作为一种 工业标准 而 VC 则是某种操作系统平台下的 厂商标 准 而 厂商标准 是在遵循 工业标准 的前提下扩展而来的 2 2 基基本本模模式式 VC 应用程序的开发主要有两种模式 一种是 WIN API 方式 另一种则是 MFC 方式 VC 基于 C C 语言 主要由是 MFC 组成 是与系统联系非常紧密的 编程工具 它兼有高级 和低级语言的双重性 功能强大 灵活 执行效率高 几乎可说 VC 在 Windows 平台无所不能 最大缺点是开发效率不高 3 3 适适用用范范围围 1 1 VC 主要是针对 Windows 系统 适合一些系统级的开发 可以方便实现 一些底层的调用 在 VC 里边嵌入汇编语言很简单 2 VC 主要用在驱动程序开发 3 VC 执行效率高 当对系统性能要求很高的时候 可用 VC 开发 4 VC 主要适用于游戏开发 5 VC 多用于单片机 工业控制等软件开发 如直接对 I O 地址操作 就 要用 C 6 VC 适用开发高效 短小 轻量级的 COM 组件 DLL 比如 WEB 上的控件 7 VC 可以开发优秀的基于通信的程序 8 VC 可以开发高效灵活的文件操作程序 9 VC 可以开发灵活高效的数据库操作程序 10 VC 是编 CAD 软件的唯一选择 包括 AUTOCAD UG 的二次开发 11 VC 在多线程 网络通信 分布应用方面 VC 有不可比拟的优势 课外设计 论文 5 3 邮件接收协议 邮件接收协议 3 1 POP3 简介简介 POP3 Post Office Protocol Version 3 即邮局办公协议 该协议用 于接收邮件的双方 客户机 POP3 服务器 进行通信 使用该协议 用户可 以脱机阅读信件 而不必把客户机长期连接到网络上 以减少网络费用 POP3 协议允许用户以一定的方式从保存邮件的服务器 即 POP3 服务器 上取走自 己的邮件 3 2 POP3 协议工作原理协议工作原理 2 POP3 提供了一种客户机 服务器脱机模型 客户机通过向服务器发送一些 命令来完成相应的操作 客户机能够发送的命令与它所处的状态有关 协议中 定义了三种状态 即确认状态 Authorization State 处理状态 Transaction State 和更新状态 Update State 在不同的状态下 客户 机可以向服务器发送的命令是有区别的 某些命令还会导致状态的转换 POP3 交互过程中的常用命令和状态转换如图 3 2 1 和表 3 2 1 所示 课外设计 论文 6 图 3 2 1 POP3 的状态转换示意图 课外设计 论文 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 1 POP3 交互模型交互模型 POP3 发送者发送者 R E A D Y Hello Mail from Rcpt to Data reque st to get O K 接接 收收 数数 据据 Q U I T 断断 开开 连连 接接 该模型基本原理为 POP3 接收者对 POP3 发送者进行初始化连接 发送者 对接收者发送询问指令 READY 接收者则向发送者提交所要接收数据的要求 发送者做出回应 并发送数据 接收者则开始接收数据 发送者发送完数据后 提出断开请求 并断开连接 数据接收过程完成 POP3POP3 接收者接收者 初初 始始 化化 连连 接接 课外设计 论文 9 5 课程设计步骤 课程设计步骤 5 1 函数构造函数构造 Windows Socket类是对Windows Socket API的封装 其中包括 CSocket和 cAsyncSocket类 使用它们能够大大简化网络通信程序的编写 套接字的数据 结构中包括下面五种数据 1 本机主机端口 接收报文或数据报的进程 2 本机主机地址 接收数据包的主机 3 远地协议端口 目的进程或程序 4 远地主机端口 目的主机 5 协议 程序在网络上传输数据时使用的协议 本应用程序就是使用 Windows sockets 编程设计的 在接收电子邮件时 必然需要涉及到连接服务器 接收数据 接收响应以及 断开等一系列操作 这就需要设计一个类来封装这些操作 在该应用程序中制 定了一个CSMTP类 该类的定义如下所示 define SMTP PORT 25 define RESPONSE BUFFER SIZE 1024 class CSMTP Public 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 BOOL FormatMAilMessage 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 BOOL transmit message CMailMessage msg struct response code UINT nResponse TCHAR sMessage enum eResponse GENERIC 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类的使用 此外还验 证其他类成员是否合法 或为其赋值 include mySock h 添加套接字类的包含文件 class CPop3Dlg public CDialog Construction public void Disp LONG flag 在不同的会话阶段显示不同的信息 mySock pop3Socket 套接字类对象实例 CPop3Dlg CWnd pParent NULL standard constructor 2 pop3Dlg cpp实现文件 include stdafx h include pop3 h 课外设计 论文 12 include pop3Dlg h include mySock h 手工添加的包含语句 BOOL CPop3Dlg OnInitDialog TODO Add extra initialization here 用户在这里添加控件成员变量的初始化代码 m strServer T POP3服务器地址 m strUser T example 邮箱的用户名 m strPass T 123456 口令 m bolDel FALSE 下载邮件后不删除 m Info T 多文本框清空 return TRUE return TRUE unless you set the focus to a control 以下是事件处理函数和其他成员函数的代码 当用户点击 连接 按钮时 执行此函数 void CPop3Dlg OnBtnConn 设定pop3类的对话框指针变量 使之指向本对话框 以便传递信息 pop3Socket SetParent this UpdateData TRUE 取来用户在对话框中输入的数据 pop3Socket Create 创建套接字对象的底层套接字 pop3Socket Connect LPCSTR m strServer 110 连接pop3服务器 m Info 多文本列表框清空 UpdateData FALSE 更新用户界面 当用户点击 断开 按钮时 执行此函数 void CPop3Dlg OnBtnDisc 课外设计 论文 13 pop3Socket Close 当用户点击 查看邮件 按钮时 执行此函数 void CPop3Dlg OnBtnView int i i m ctrList GetCurSel 获得用户在组合框中的选择 获得并显示指定信件的基本属性及信件内容 m Info pop3Socket GetMsgStuff i m Info pop3Socket GetMsgBody i 在不同的情况下 向用户显示不同的信息 void CPop3Dlg Disp LONG flag CString s switch flag case S CONNECT 已连接到服务器 显示信息 s 已连接到 m strServer r n m Info s 禁用连接按钮 GetDlgItem IDC BTN CONN EnableWindow FALSE 启用断开按钮 GetDlgItem IDC BTN DISC EnableWindow TRUE 禁用查看邮件按钮 GetDlgItem IDC BTN VIEW EnableWindow FALSE break case S RECEIVE 收到服务器发来的响应 显示它的内容 课外设计 论文 14 m Info pop3Socket lastMsg break case S CLOSE 显示关闭连接的信息 m Info pop3Socket error s 连接已经关闭 r n m Info s 启用连接按钮 GetDlgItem IDC BTN CONN EnableWindow TRUE 禁用断开按钮 GetDlgItem IDC BTN DISC EnableWindow FALSE break case S GETNUM 已经知道了邮箱中信件的总数 s Format 邮箱中共有 d 封信 r n pop3Socket numMsg m Info s break case S GETSIZE 显示信件的大小 s Format 信箱中信件大小为 d字节 r n pop3Socket sizeMsg m Info s break case S ENDRETR 所有信件已下载完毕 显示信息 s Format 共下载了 d 封信件 r n pop3Socket msgs size m Info s 如果有信件下载 启用查看邮件按钮 if pop3Socket msgs size 0 GetDlgItem IDC BTN VIEW EnableWindow TRUE break UpdateData FALSE 更新用户界面 当点击 存储 按钮时 执行此函数 课外设计 论文 15 void 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 课外设计 论文 16 m 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 s r n 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 课外设计 论文 17 sFrom 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 r n LPCT STR sEmail m wsSMTPServer Get LPCTSTR sTemp sTemp GetLength Get response GENERIC SUCCESS sTemp T DATA r n 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 r n r n m wsSMTPServer Get LPCTSTR sTemp sTemp GetLength if Get response GENERIC SUCCESS return FALSE Return TRUE 在此函数中 首先发送 MAIL 命令 通知服务器收信人的邮箱地址 然后发 进 RCPT 命令 通知服务器发信人的邮箱地址 需要注意的是 在有多个发信人 课外设计 论文 18 时 必须为每个发信人都发送一次 RCPT 命令 通知服务器将要进行邮件数据的 传输 此后 分别将邮件头和邮件体从服务器上接收下来 这里需要注意一点 当邮件数据接收完毕后 需要额外发送一个 回车 换行 回车 换行 信号 以通知邮件数据传输完毕 3 当邮件接收完毕后 一般不需要保持与 SMTP 服务器的连接 而断 开的工作由 Disconnect 函数完成 Disconnect 代码如下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司流程业务管理制度
- 公司章程经营管理制度
- 公司财务档案管理制度
- 2025年度家具采购合同样本
- 河北省承德县2024-2025学年高一下册期中考试数学试卷附解析
- 广东省广州市2024-2025学年高二下册期中考试数学试卷附解析
- 2025年中考语文(长沙用)课件:微专题精讲 SOLO评价法(分层赋分)
- 2024~2025学年 重庆市高一语文上册第一学月考试试卷附答案
- 智能调度与优化控制-洞察阐释
- 2024年龙岩市新罗区教育局招聘真题
- 2025年免疫规划工作计划
- 【MOOC】敢创会创-大学生创新创业实务-南京信息工程大学 中国大学慕课MOOC答案
- 【MOOC】土木工程制图-同济大学 中国大学慕课MOOC答案
- 北师大版三年级数学下册复习计划
- 2025年公务员考试《行测》模拟题及答案(详细解析)
- 针刺伤预防与处理-2024中华护理学会团体标准
- 四年级校本课程教材-全册(自编教材)
- 酒店与代理合作协议书范文模板
- 天然气的高压物性课件
- 污水池清理施工的方案
- 医院内部控制手册范本
评论
0/150
提交评论