收发无附件的邮件毕业设计论文)word格式
计算机网络课程设计报告书课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位:计算机科学与技术学院 题 目: 收发无附件的邮件 初始条件:本门课程设计的目的旨在使学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,培养学生解决实际问题的动手能力。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)要求学生在上机前应认真做好各种准备工作,熟悉每个题目涉及的网络相关知识,熟悉机器的操作系统、语言的集成环境和设计工具,独立完成算法编制和程序代码的编写;上机时应随带有关的教材或指导书;要学会程序的调试与测试。课程设计时间为一周。周五交报告,报告的内容应包括:(1)任务书;(2)简要的设计目的和预期结果;(3)程序清单,程序分析说明与测试结果;(4)收获与体会。时间安排:周一:收集与查阅相关文献,熟悉题目。周二:需求分析与功能设计。周三:编码,完成初步功能模块。周四:代码测试并逐步完善。周五:撰写报告,课程设计验收。小组成员可互相讨论,但严禁抄袭。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日收发无附件的邮件一、 设计要求及设计内容11课设概述该课程设计主要任务是实现收发无附件的邮件。在上机前应认真做好各种准备工作,熟悉每个题目涉及的网络相关知识,熟悉机器的操作系统、语言的集成环境和设计工具。在实验过程中,通过一个实际网络协议或网络应用系统的分析与总体设计,综合运用所学知识,加深对网络知识理解和掌握。同时培养自己的分析问题和解决问题的能力,以及软件文档的制作能力。12电子邮件的工作原理:(1) 电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。 电子邮件的传输是通过电子邮件简单传输协议(Simple Mail Transfer Protocol,简称SMTP)这一系统软件来完成的,它是Internet下的一种电子邮件通信协议。 (2) 电子邮件的基本原理,是在通信网上设立“电子信箱系统”,它实际上是一个计算机系统。系统的硬件是一个高性能、大容量的计算机。硬盘作为信箱的存储介质,在硬盘上为用户分一定的存储空间作为用户的“信箱”,每位用户都有属于自己的个电子信箱。并确定个用户名和用户可以自己随意修改的口令。存储空间包含存放所收信件、编辑信件以及信件存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、读信、编辑、转发、存档等各种操作。系统功能主要由软件实现。(3) 电子邮件的通信是在信箱之间进行的。用户首先开启自己的信箱,然后通过键入命令的方式将需要发送的邮件发到对方的信箱中。邮件在信箱之间进行传递和交换,也可以与另个邮件系统进行传递和交换。收方在取信时,使用特定账号从信箱提取。1.3电子邮件的实现E-mail通信过成时给予TCP/IP协议的。在本次实验中,主要使用的是SMTP及POP两个协议,它们在windows里都是通过Winsock来实现通信。(1)SMTP模型描述:采用C/S(客户端/服务器)模式。常用的SMTP服务器运行在远程站点上,它是邮件的中间传递机构。发送邮件的客户端不用了解如何把邮件发送到目的信箱的服务器上,只要告诉具有传递机制的SMTP服务器一些必要的信息即可以实现简单邮件传输功能。(2)POP模型描述:它是一个简单协议,可以用来从邮件服务器上下载邮件。通过POP,可以从Internet提供商的服务器下载邮件,并通过邮件程序来阅读邮件,或者处理邮件。如:接收邮件、下载邮件、删除邮件等。二、 软件设计描述2.1需求分析在本次实验中,代码主要完成的功能是实现邮件的收发,因此需要利用基于SMTP的简单邮件传输协议和基于POP的接收下载邮件协议。因此在本实验中,需设计5大模块:1.主函数模块,可设定菜单栏,有用户自行选择要对邮箱进行哪项操作;2.对于输入的邮箱用户进行连接与身份认证;3.基于SMTP协议下实现邮件发送功能,可实现一对一的邮件发送;4.基于POP协议下实现邮件接收功能,即能读取邮件信息;5.基于POP协议下实现邮件下载功能,即存储邮件; 2.2设计思路2.2.1熟悉SMTP和POP3协议:由于要开发的是邮件客户端程序,就不得不用到SMTP协议和POP协议。邮件发送功能的实现,必然会涉及到SMTP(Simple Mail Transfer Protocol)协议。SMTP被用来在因特网上发送邮件,该协议规定了一些基本的命令和方法使客户端与服务器进行交互,以达到发送邮件的目的。(1)、SMTP协议SMTP协议(简单邮件传输协议)是TCP/IP协议族中的一员,主要对如何将电子邮件从发送方地址传送到接收方地址,也即是对传输的规则做了规定。针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。SMTP协议的通信过程比较简单,可以通过下图来理解:用户发送端SMTP协议软件文件系统接受端的应答接收端SMTP协议软件SMTP命令及邮件内容文件系统由于SMTP协议是基于TCP协议的,且是建立连接的,因此在发送邮件之前,需要利用TCP协议在发送端与接收端之间建立一条连接。然后,发送端通过SMTP命令将邮件内容发送到接收端,接收端将接收到的命令和内容处理后,将应答返回给发送端。就这样,完成邮件发送的过程。(2)、POP3协议POP3协议(邮局协议第三版)适用于C/S结构,其通信也是建立TCP连接的。通信过程中,POP3客户端向POP3服务器发送命令并等待响应。POP3命令同SMTP命令一样,均采用命令行形式,用ASCII码表示。2.2.2运用SMTP和POP3协议发送接收邮件:(1)、用SMTP命令发送邮件SMTP命令命令说明HELLO domain CRLF识别发送方到接收SMTP的一个HELLO命令MAIL FROM:reverse-pathCRLFreverse-path为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。RCPT TO:forward-pathCRLFforward-path标识各个邮件接收者的地址DATA CRLF接收SMTP将把其后的行为看作邮件数据去处理,以CRLF.CRLF标识数据的结尾。REST CRLF退出/复位当前的邮件传输NOOP CRLF要求接收SMTP仅做OK应答。(用于测试)QUIT CRLF要求接收SMTP返回一个OK应答并关闭传输。VRFY string CRLF验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。EXPN string CRLF验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。HELP CRLF查询服务器支持什么命令利用上述命令,可以与smtp.163.com.cn服务器建立连接并发送邮件。以下为程序参考流程:开始Y读取成功?从文件中读取E-mail地址及类型代码N提示读取失败生成初始用户名、密码、发信邮箱地址选择或输入服务器名称输入用户名、密码、发信邮箱、收信邮箱等信息信息填写是否完整?NY提示信息填写不完整开始发送邮件邮件发送是否成功?Y结束提示邮件发送成功N在状态框中提示失败的环节选择客户类型并从info.txt文件中读取出该类型的邮件内容(2)用POP3命令接收邮件POP3命令命令说明USER <username>用户名,此命令与下面的pass命令若成功,将导致状态转换。PASS <password>密码。APOP <Name> <Digest>Digest是MD5消息摘要。STAT查看统计,执行后,POP3服务器会响应一个正确应答,它以“+OK”开头,接着是两个数字,第一个是邮件数目,第二个是邮件的大小。UIDL <Msg#>返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的。LIST <Msg#>返回邮件数量和每个邮件的大小。RETR <Msg#>返回由参数标识的邮件的全部文本。DELE <Msg#>服务器将由参数标识的邮件标记为删除,由quit命令执行。RSET服务器将重置所有标记为删除的邮件,用于撤消DELE命令。TOP <Msg#>服务器将返回由参数标识的邮件前n行内容,n必须是正整数。NOOP服务器返回一个肯定的响应。QUIT命令发出后,telnet断开与POP3服务器的连接,系统进入更新状态。POP3协议要求先登录邮箱,再查看邮件。登录需要用户名和密码,在这里用户名和密码不需要进行BASE64编码的加密,方便在命令行下登录,但由于用户名和密码都是用明文传输给服务器的,因此安全性比较低。当登录成功后,就可以查看邮箱状态、查看邮件和管理邮件了。以下为邮件接收程序参考流程:开始信息填写是否完整?生成初始用户名、密码选择或输入服务器名称更改或输入用户名及密码N提示信息不完整Y登录邮箱登录邮箱是否成功?YN选择邮件序号并打开该邮件是否保存邮件?Y将邮件保存到文件rec_info.txt中结束提示登录出错的环节N三、 具体程序及主要代码邮件发送核心代码:void CSample37View:OnSendMail() / 找到要调用的MAPI函数地址 (FARPROC&) lpfnMAPISendMail = GetProcAddress(m_hMAPILib, "MAPISendMail");(FARPROC&) lpfnMAPILogon = GetProcAddress(m_hMAPILib, "MAPILogon");(FARPROC&) lpfnMAPILogoff =GetProcAddress(m_hMAPILib, "MAPILogoff");(FARPROC&) lpfnMAPIFreeBuffer = GetProcAddress(m_hMAPILib, "MAPIFreeBuffer");/ 生成信报结构指针m_pMessage = new(MapiMessage);memset(m_pMessage, 0, sizeof(MapiMessage); / 下面设置信报结构的各个域UpdateData(TRUE); / 把ulReserved设置为0: m_pMessage->ulReserved = 0; / 设置信件标题(lpszSubject): char subject512;:strcpy(subject, m_strSubject);m_pMessage->lps