收发无附件的邮件毕业设计(论文)word格式.doc

上传人:laozhun 文档编号:4024733 上传时间:2023-04-01 格式:DOC 页数:13 大小:264.50KB
返回 下载 相关 举报
收发无附件的邮件毕业设计(论文)word格式.doc_第1页
第1页 / 共13页
收发无附件的邮件毕业设计(论文)word格式.doc_第2页
第2页 / 共13页
收发无附件的邮件毕业设计(论文)word格式.doc_第3页
第3页 / 共13页
收发无附件的邮件毕业设计(论文)word格式.doc_第4页
第4页 / 共13页
收发无附件的邮件毕业设计(论文)word格式.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《收发无附件的邮件毕业设计(论文)word格式.doc》由会员分享,可在线阅读,更多相关《收发无附件的邮件毕业设计(论文)word格式.doc(13页珍藏版)》请在三一办公上搜索。

1、课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位:计算机科学与技术学院 题 目: 收发无附件的邮件 初始条件:本门课程设计的目的旨在使学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,培养学生解决实际问题的动手能力。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)要求学生在上机前应认真做好各种准备工作,熟悉每个题目涉及的网络相关知识,熟悉机器的操作系统、语言的集成环境和设计工具,独立完成算法编制和程序代码的编写;上机时应随带有关的教材或指导书;要学会程序的调试与测试。课程设计时间为一周。周五交报告,报告的内容应包括:(1)任务书;(2)

2、简要的设计目的和预期结果;(3)程序清单,程序分析说明与测试结果;(4)收获与体会。时间安排:周一:收集与查阅相关文献,熟悉题目。周二:需求分析与功能设计。周三:编码,完成初步功能模块。周四:代码测试并逐步完善。周五:撰写报告,课程设计验收。小组成员可互相讨论,但严禁抄袭。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日收发无附件的邮件一、 设计要求及设计内容11课设概述该课程设计主要任务是实现收发无附件的邮件。在上机前应认真做好各种准备工作,熟悉每个题目涉及的网络相关知识,熟悉机器的操作系统、语言的集成环境和设计工具。在实验过程中,通过一个实际网络协议或网络应用系统的分析与总

3、体设计,综合运用所学知识,加深对网络知识理解和掌握。同时培养自己的分析问题和解决问题的能力,以及软件文档的制作能力。12电子邮件的工作原理:(1) 电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。 电子邮件的传输是通过电子邮件简单传输协议(Simple Mail Transfer Protocol,简称SMTP)这一系统软件来完成的,它是Internet下的一种电子邮件通信协议。 (2) 电子邮件的基本原理,是在通信网上设立“电子信箱系统”,它实际上是一个计算机系统。系统的硬件是一个高性能、大容量的计算机。硬盘作为信箱的存储介质,在硬盘上为用户分一定的存储空间作为用户的“信

4、箱”,每位用户都有属于自己的个电子信箱。并确定个用户名和用户可以自己随意修改的口令。存储空间包含存放所收信件、编辑信件以及信件存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、读信、编辑、转发、存档等各种操作。系统功能主要由软件实现。(3) 电子邮件的通信是在信箱之间进行的。用户首先开启自己的信箱,然后通过键入命令的方式将需要发送的邮件发到对方的信箱中。邮件在信箱之间进行传递和交换,也可以与另个邮件系统进行传递和交换。收方在取信时,使用特定账号从信箱提取。1.3电子邮件的实现E-mail通信过成时给予TCP/IP协议的。在本次实验中,主要使用的是SMTP及POP两个协议,它们在windo

5、ws里都是通过Winsock来实现通信。(1)SMTP模型描述:采用C/S(客户端/服务器)模式。常用的SMTP服务器运行在远程站点上,它是邮件的中间传递机构。发送邮件的客户端不用了解如何把邮件发送到目的信箱的服务器上,只要告诉具有传递机制的SMTP服务器一些必要的信息即可以实现简单邮件传输功能。(2)POP模型描述:它是一个简单协议,可以用来从邮件服务器上下载邮件。通过POP,可以从Internet提供商的服务器下载邮件,并通过邮件程序来阅读邮件,或者处理邮件。如:接收邮件、下载邮件、删除邮件等。二、 软件设计描述2.1需求分析在本次实验中,代码主要完成的功能是实现邮件的收发,因此需要利用基

6、于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)协议。

7、SMTP被用来在因特网上发送邮件,该协议规定了一些基本的命令和方法使客户端与服务器进行交互,以达到发送邮件的目的。(1)、SMTP协议SMTP协议(简单邮件传输协议)是TCP/IP协议族中的一员,主要对如何将电子邮件从发送方地址传送到接收方地址,也即是对传输的规则做了规定。针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。SMTP协议的通信过程比较简单,可以通过下图来理解:用户发送端SMTP协议软件文件系统接受端的应答接收端SMTP协议软件SMTP命

8、令及邮件内容文件系统由于SMTP协议是基于TCP协议的,且是建立连接的,因此在发送邮件之前,需要利用TCP协议在发送端与接收端之间建立一条连接。然后,发送端通过SMTP命令将邮件内容发送到接收端,接收端将接收到的命令和内容处理后,将应答返回给发送端。就这样,完成邮件发送的过程。(2)、POP3协议POP3协议(邮局协议第三版)适用于C/S结构,其通信也是建立TCP连接的。通信过程中,POP3客户端向POP3服务器发送命令并等待响应。POP3命令同SMTP命令一样,均采用命令行形式,用ASCII码表示。2.2.2运用SMTP和POP3协议发送接收邮件:(1)、用SMTP命令发送邮件SMTP命令命

9、令说明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应答

10、。(用于测试)QUIT CRLF要求接收SMTP返回一个OK应答并关闭传输。VRFY string CRLF验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。EXPN string CRLF验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。HELP CRLF查询服务器支持什么命令利用上述命令,可以与服务器建立连接并发送邮件。以下为程序参考流程:开始Y读取成功?从文件中读取E-mail地址及类型代码N提示读取失败生成初始用户名、密码、发信邮箱地址选择或输入服务器名称输入用户名、密码、发信邮箱、收信邮箱等信息信息填写是否完整?NY提示信息填写不完整开始发送邮件邮件发送是否成功?Y结束

11、提示邮件发送成功N在状态框中提示失败的环节选择客户类型并从info.txt文件中读取出该类型的邮件内容(2)用POP3命令接收邮件POP3命令命令说明USER 用户名,此命令与下面的pass命令若成功,将导致状态转换。PASS 密码。APOP Digest是MD5消息摘要。STAT查看统计,执行后,POP3服务器会响应一个正确应答,它以“+OK”开头,接着是两个数字,第一个是邮件数目,第二个是邮件的大小。UIDL 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的。LIST 返回邮件数量和每个邮件的大小。RETR 返回由参数标识的邮件的全部文本。DELE 服务器将由参数标识的邮件标记为

12、删除,由quit命令执行。RSET服务器将重置所有标记为删除的邮件,用于撤消DELE命令。TOP 服务器将返回由参数标识的邮件前n行内容,n必须是正整数。NOOP服务器返回一个肯定的响应。QUIT命令发出后,telnet断开与POP3服务器的连接,系统进入更新状态。POP3协议要求先登录邮箱,再查看邮件。登录需要用户名和密码,在这里用户名和密码不需要进行BASE64编码的加密,方便在命令行下登录,但由于用户名和密码都是用明文传输给服务器的,因此安全性比较低。当登录成功后,就可以查看邮箱状态、查看邮件和管理邮件了。以下为邮件接收程序参考流程:开始信息填写是否完整?生成初始用户名、密码选择或输入服

13、务器名称更改或输入用户名及密码N提示信息不完整Y登录邮箱登录邮箱是否成功?YN选择邮件序号并打开该邮件是否保存邮件?Y将邮件保存到文件rec_info.txt中结束提示登录出错的环节N三、 具体程序及主要代码邮件发送核心代码:void CSample37View:OnSendMail() / 找到要调用的MAPI函数地址 (FARPROC&) lpfnMAPISendMail = GetProcAddress(m_hMAPILib, MAPISendMail);(FARPROC&) lpfnMAPILogon = GetProcAddress(m_hMAPILib, MAPILogon);(F

14、ARPROC&) 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;

15、/ 设置信件标题(lpszSubject): char subject512;:strcpy(subject, m_strSubject);m_pMessage-lpszSubject = subject; / 设置信件内容: char text20000;:strcpy(text, m_strContent);m_pMessage-lpszNoteText = text; / 设置信息类型指针m_pMessage-lpszMessageType = NULL; / 指向接收这个消息的时间的指针CTime time = CTime:GetCurrentTime();CString str =

16、time.Format(%Y/%m/%d/%H);char t50;:strcpy(t, str);m_pMessage-lpszDateReceived = t;/ 指向标识消息所属会话线程的串的指针m_pMessage-lpszConversationID = NULL;/ 设置flFlags标识m_pMessage-flFlags = MAPI_SENT;/ 用一个指向MapiRecipDesc结构的指针设置发送者信息m_pMessage-lpOriginator = NULL;/ 设置接收者数目m_pMessage-nRecipCount = 1;/ 接收者信息str = m_strA

17、ddress.Left(m_strAddress.Find();char address1100;char address2100;:strcpy(address1, str);str = SMTP:+m_strAddress;:strcpy(address2, str);MapiRecipDesc recipient = 0, MAPI_TO, address1, address2, 0, NULL; m_pMessage-lpRecips = &recipient;/ 设置附件数量m_pMessage-nFileCount = 0;/ 设置附件信息m_pMessage-lpFiles =

18、NULL;/ 建立会话LHANDLE lhSession;ULONG lResult = lpfnMAPILogon(0, NULL, NULL, 0, 0, &lhSession);if (lResult != SUCCESS_SUCCESS)AfxMessageBox(发送失败);return;/ 进行信报的发送lResult = lpfnMAPISendMail(0, 0, m_pMessage, 0, 0);if (lResult != SUCCESS_SUCCESS)AfxMessageBox(发送失败);return;/ 释放信报结构的内存空间lpfnMAPIFreeBuffer(

19、m_pMessage);/ 结束会话lResult=lpfnMAPILogoff(lhSession, 0, 0, 0);m_strSubject = 邮件已成功发送给 + m_strAddress;m_strAddress = cpf84802;m_strContent = ;UpdateData(FALSE);邮件接收核心代码:void CRecvView:OnRecvMail() (FARPROC&) lpfnMAPILogon = GetProcAddress(m_hMAPILib, MAPILogon);(FARPROC&) lpfnMAPILogoff = GetProcAddre

20、ss(m_hMAPILib, MAPILogoff);(FARPROC&) lpfnMAPIFreeBuffer = GetProcAddress(m_hMAPILib, MAPIFreeBuffer);(FARPROC&) lpfnMAPIFindNext = GetProcAddress(m_hMAPILib, MAPIFindNext);(FARPROC&) lpfnMAPIReadMail = GetProcAddress(m_hMAPILib, MAPIReadMail);count+;/ 建立会话ULONGlResult = lpfnMAPILogon(0, NULL, NULL,

21、 MAPI_LOGON_UI, 0, &m_lhSession);if (lResult != SUCCESS_SUCCESS)AfxMessageBox(建立会话失败);return;/ 定位到第一个邮件char pMessageID513;lResult = lpfnMAPIFindNext(m_lhSession, NULL, NULL, NULL, MAPI_LONG_MSGID , 0, pMessageID);if (lResult != SUCCESS_SUCCESS)AfxMessageBox(错误:请确认收件箱不为空!);return;/ 分配信报结构的内存空间m_pMess

22、age = new(MapiMessage);memset(m_pMessage, 0, sizeof(MapiMessage);/ 读取第一个信报lResult = lpfnMAPIReadMail(m_lhSession, NULL, pMessageID, MAPI_SUPPRESS_ATTACH, 0, &m_pMessage);if (lResult != SUCCESS_SUCCESS)AfxMessageBox(错误:读取信报出错!);return;/ 处理读取结果,在窗口中显示得到的信报m_strSubject = (CString)m_pMessage-lpszSubject

23、;m_strAddress = (CString)m_pMessage-lpOriginator-lpszAddress;m_strTime = (CString)m_pMessage-lpszDateReceived;m_strContent = (CString)m_pMessage-lpszNoteText;UpdateData(FALSE);/ 在访问另一条信件以前释放内存lpfnMAPIFreeBuffer(m_pMessage);/ 结束会话lResult=lpfnMAPILogoff(m_lhSession, 0, 0, 0);return;四、 调试及运行结果4.1调试工具我使

24、用了两个软件对程序进行调试,一个是VC+ 6.0软件,我不仅用这个软件编写设计程序,而且用其强大的程序调试功能,对程序的变量进行监视,同时达到调试程序代码语法错误的目的。另一为Windows XP 自带的Outlook Express电子邮件,首先需要在Outlook Express中设置smtp以及pop的服务器。在Outlook Express新建账户,设置电子邮件服务器名:已登录163邮箱为例:设置成功后其属性如下:4.2测试结果:发送邮件测试:点击上方第一个“发送邮件”图标,可成功向476242159发送邮件。接收邮件测试:点击上方第二个“接收邮件”图标,接收到收件箱内的邮件。点击第三

25、个“退出”图标,成功推出程序。五、 设计心得 本次课程设计我基本上完成了收发带附件邮件的任务,能够根据请求,发送邮件、收取邮件以及相关的信息。但是还是有很多的问题,由于是由MAPI实现的,因此所有的通信都和Outlook打交道,只是通过调用微软提供的方式来和服务器通信,没能实现直接与邮件服务器之间的通信。由于时间紧促我也来不及实现用SOCKET来与服务器之间的通信。要做好这个邮件发送与接收的程序,需要对SMTP协议和POP3协议非常熟悉,因此在设计程序之前,对这两个协议做了充分的了解和实践。首先,了解SMTP协议和POP3协议的工作原理,这样为后来对程序的设计、调试有很重要的意义。比如,知道了

26、这两个协议都是在TCP连接的基础上的,那么在后来的调试中就可以用Iris软件只截获TCP数据包,这样就过滤掉了一些没有用的数据包。然后,我用SMTP命令和POP3命令在命令行下反复发送和接收邮件,观察对不同命令,服务器的应答有什么不同。通过本次课程设计,我加深了对网络通信工作原理的认识,也进一步的提高了自身的动手能力和逻辑思维能力。它让我认识到我们所接触到的任何成品的应用软件的功能强大性,同时也让我认识到界面友好的重要性。对于TCP/IP应用层的电子邮件传输协议(SMTP)的应用,根据SMTP提供的命令与服务器进行通信,同时进行错误检测检测通信是否成功,并在命令窗口显示相应的参数,用户可以通过

27、参数来判断与服务器的通信是否成功,并从中得到相应的邮件数据。 不过,通过本次课程设计,我了解到网络的工作方式-根据协议传送数据让客户端、服务器端彼此能够识别网络上传输的数据。协议是通信双方彼此应当遵守的通信规则,只有约定的规则,终端才能识别网络传送的数据流所表达的信息。 对于这些应用层的一系列通信操作,技术已比较成熟,在编写程序的时候可以通过调用别人已经实现好的方法来为我们自己服务。总的来说,在课程设计的整个过程中,我和顾旭舟学到了很多知识、学会了一些解决问题的方法,也夯实了对本学期学到的知识的掌握,使我们俩对网络知识的运用和程序设计的能力有了很大的提高。本科生课程设计成绩评定表班级:姓名:学号:序号评分项目满分实得分1学习态度认真、遵守纪律102设计分析合理性103设计方案正确性、可行性、创造性204设计结果正确性405设计报告的规范性106设计验收10总得分/等级评语:注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格指导教师签名:2010 年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号