收发无附件的邮件毕业设计(论文)word格式_第1页
收发无附件的邮件毕业设计(论文)word格式_第2页
收发无附件的邮件毕业设计(论文)word格式_第3页
收发无附件的邮件毕业设计(论文)word格式_第4页
收发无附件的邮件毕业设计(论文)word格式_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

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提示信息填写不完整开始发

11、送邮件邮件发送是否成功?y结束提示邮件发送成功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

14、, 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-u

15、lreserved = 0; / 设置信件标题(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()

16、;cstring str = 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;/ 接收

17、者信息str = m_straddress.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_pmes

18、sage-lpfiles = 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;/ 释放信报结构的内存空间lpfn

19、mapifreebuffer(m_pmessage);/ 结束会话lresult=lpfnmapilogoff(lhsession, 0, 0, 0);m_strsubject = 邮件已成功发送给 + m_straddress;m_straddress = ;m_strcontent = ;updatedata(false);邮件接收核心代码:void crecvview:onrecvmail() (farproc&) lpfnmapilogon = getprocaddress(m_hmapilib, mapilogon);(farproc&) lpfnmap

20、ilogoff = getprocaddress(m_hmapilib, mapilogoff);(farproc&) lpfnmapifreebuffer = getprocaddress(m_hmapilib, mapifreebuffer);(farproc&) lpfnmapifindnext = getprocaddress(m_hmapilib, mapifindnext);(farproc&) lpfnmapireadmail = getprocaddress(m_hmapilib, mapireadmail);count+;/ 建立会话ulonglresult = lpfnma

21、pilogon(0, null, null, 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(错误:请确认收件箱不为空!);retur

22、n;/ 分配信报结构的内存空间m_pmessage = 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)

23、m_pmessage-lpszsubject;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);retu

24、rn;四、 调试及运行结果4.1调试工具我使用了两个软件对程序进行调试,一个是vc+ 6.0软件,我不仅用这个软件编写设计程序,而且用其强大的程序调试功能,对程序的变量进行监视,同时达到调试程序代码语法错误的目的。另一为windows xp 自带的outlook express电子邮件,首先需要在outlook express中设置smtp以及pop的服务器。在outlook express新建账户,设置电子邮件服务器名:已登录163邮箱为例:设置成功后其属性如下:4.2测试结果:发送邮件测试:点击上方第一个“发送邮件”图标,可成功向476242159发送邮件。接收邮件测试:点击上方第二个“接收邮件”图标,接收到收件箱内的邮件。点击第三个“退出”图标,成功推出程序。五、 设计心得 本次课程设计我基本上完成了收发带附件邮件的任务,能够根据请求,发送邮件、收取邮件以及相关的信息。但是还是有很多的问题,由于是由mapi实现的,因此所有的通信都和outlook打交道,只是通过调用微软提供的方式来和服务器通信,没能实现直接与邮件服务器之间的通信。由于时间紧促我也来不及实现用socket来与服务器之间的通信。要做好这个邮件发送与接收的程序,需要对smtp协议和pop3协议非常熟悉,因此在设计程序之前,对这两个协议做了充分的

温馨提示

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

评论

0/150

提交评论