电子邮件发送和接收程序的开发_第1页
电子邮件发送和接收程序的开发_第2页
电子邮件发送和接收程序的开发_第3页
电子邮件发送和接收程序的开发_第4页
电子邮件发送和接收程序的开发_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计报告程序设计报告电子邮件发送和接收程序的开发班班级:级:电子电子 姓姓名:名: 学学号:号: 指导老师:指导老师: 日日期:期:20072007 年年 7 7 月月 vc+vc+课程设计课程设计 第 1 页目目 录录 第一章第一章 需需求求分分析析 .2 21.1 开发背景 .21.2 功能要求 .2第二章第二章 系统总体分析系统总体分析 .2 22.1 电子邮件介绍.22.2 总体设计方案及思路.32.2.1 电子邮件的发送程序.32.2.2 电子邮件的接收程序.42.3 模块分析.42.3.1 电子邮件发送程序的主要模块.52.3.2 电子邮件接收程序的主要模块.5第三章第三章 程

2、序的测试(运行截图)程序的测试(运行截图) .5 53.1 添加“关于”标签的测试 .53.2 发送邮件的测试 .63.3 收取邮件的测试.8第四章第四章 设设计计总结总结 .84.1 课程小结.84.2 个人小结.9附录附录 (源代码)(源代码) .91 “关于”标签的程序代码 .92 电子邮件发送程序的代码.103 附件的代码.133 电子邮件接受程序的代码.14 vc+vc+课程设计课程设计 第 2 页第一章、需求分析第一章、需求分析1.11.1、开发背景、开发背景随着互联网的不断发展,越来越多的企业单位通过电子邮件来协同工作,打破时间与地域的限制,大大提高了工作效率。电子邮件已地经成为

3、人们生活中不可缺少的一部分。但是,当前流行的各大邮件客户端软件除了最主要的收发信件之外,功能越来越复杂,但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不实用。所以这次的课程设计,我选择了制作一个操作简单,又可以实现最基本的电子邮件的收发功能的工具。1.21.2、功能要求、功能要求基本发送和接受邮件的功能。实现通信功能。具有简单、实用、易操作的图形界面。在以上基础上尽量实现发送附件的功能。程序还应可以判断整个过程是否能正常运行,如果不正常运行,必须给出错误信息。第二章、系统总体分析第二章、系统总体分析2.12.1、电子邮件介绍、电子邮件介绍电

4、子邮件又称 e-mai1,是种用电子手段提供信息交换的通信方式。它是全球多种网络上使用最普遍的一项服务。这种非交互式的通信,加速了信息的交流及数据传送,它是个简易、快速的方法。通过连接全世界的 internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。到目前为止,可以说电子邮件是 internet 资源使用最多的一种服务,e-mai1 不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。电子邮件的处理由两大部分组成:电子邮件发送程序和电子邮件接收程序。电子邮件发送程序的发送方式有两种:第一种是本地计算机与用户所指定的发送邮件服务器连接,然后通过发送

5、邮件服务器将邮件传递到接收邮件服务器,邮件中包含有信件的主题和内容等一系列信息;第二种是本地计算机直接与接收电子邮件的服务器相连,并将邮件送入收件者的邮箱中。电子邮件接收程序则只需要处理本地计算机与存放电子邮件的服务器相连接,并通过帐号和口令从服务器中获取电子邮件,邮件中包含有信件的主题、内容和发送时间等。 vc+vc+课程设计课程设计 第 3 页2.22.2、总体设计方案及思路、总体设计方案及思路(1)(1)电子邮件的发送程序电子邮件的发送程序发送邮件的程序必须能够做 3 件事情:与接收电子邮件的服务器相连接;将相关的信息送入收件人的信箱;程序还应可以判断整个过程是否能正常运行,如果不正常运

6、行,必须给出错误信息。一般情况下,在中,电子邮件程序的编写是利用自带的以及相关的通信协议 smpt/pop3 等来实现的。但是要利用 mapi 和通信协议实现一个功能强大的电子邮件管理程序,需要很强的相关专业知识。随着现代软件业的发展,软件厂商提供了方便、简易,与服务器无关且稳定的电子邮件处理组件,使我们可以在程序开发语言中调用这些组件,利用很简单的语言实现功能强大的程序。jmail 组件就是一个很好用的电子邮件程序开发第三方组件。所以这次的课程设计我选择了组件。jmail 组件中包含许多实现电子邮件处理的属性和方法。只需要在 vc+代码中创建一个 jmail 组件的对象,调用其中的某些功能,

7、就能很快完成程序的开发。jmail 常用的发送邮件的基本属性和方法如表 1 所示。表表 1 1 jmailjmail 常用发送邮件的基本属性和方法常用发送邮件的基本属性和方法方法和属性功能body邮件内容charset字符集,默认为“us-ascii”sendname发送人姓名sender发送人邮箱地址serveraddresssmpt 服务器地址,可制定多个,用分号分开,并可指定端口;为空白时,jmail会尝试解决远程邮件服务器,然后直接发送。subject标题priority优先级(1:高优先级;3:普通优先级;5:低优先级)addattachment(“filename”,content

8、type)添加文件附件addcustomattachment(“filename”,data)添加自定义附件addurlattachment(“bstrurl”,“bstrattachas”,bstrauth)下载并添加一个来自 bstrurl 的附件,bstrattachas 指定受到信件的文件名。addrecipient(“email-address”)增加一个收件人addrecipientex(“email-address”,“name”)增加一个带名字的收件人appendbodyfromfile(“filename”)将一个文件追加到正文后appendtext(“text”)追加信的正

9、文内容execute()方法执行发送close()方法强制 jmail 关闭缓冲与邮件服务器的连接 vc+vc+课程设计课程设计 第 4 页由于 jmail 是第三方组件,因此 vc+程序要想调用 jmail 对象,就必须先下载 jmail动态链接库,并在本机中进行注册。具体操作方法如下:打开运行对话框,输入 cmd,打开命令提示符编辑器,输入如下指令即可注册成功:(jmail 组件的安装路径)regsvr32 jmail.dll(2)(2)电子邮件的接收程序电子邮件的接收程序接收邮件的程序必须能够做三件事:与存放电子邮件的服务器相连接;读取相关的信件信息,并存放与本地计算机中;程序还将判断整

10、个过程是否能正常运行,如果不正常运行,必须给出错误信息。与电子邮件发送程序的编写相同,我还是采取 vc+语言和 jmail 组件相结合的方法来实现邮件的收取。jmail 常用的接收邮件的基本属性和方法如表 2 所示。表表 2 2 jmailjmail 常用接收信件的基本属性和方法常用接收信件的基本属性和方法方法和属性功能body邮件内容charset字符集,默认为(us-ascii)date信件发送日期mailserver邮箱所在的服务器subject标题timeout连接服务器的超时限制connect()连接服务器,需要参数:帐号、口令、服务器地址、端口2.32.3、模块分析、模块分析电子子

11、邮件接受方式程序主要由以下两个大的模块构成:发送邮件模块和收取邮件模块。其功能模块如图 1 所示:电子邮件客户应用系统发送邮件接收邮件 vc+vc+课程设计课程设计 第 5 页 图图 1 1 电子邮件功能模块图电子邮件功能模块图(1)(1)电子邮件发送程序的主要模块电子邮件发送程序的主要模块电子邮件发送程序主要由以下几个模块组成:邮件服务器:用于填写收件人的邮箱服务器(可以不填) ;收件人信箱:用于填写收件人的邮箱名;发件人信箱:用于填写发件人的邮箱名;主题:用于填写信件主题;正文:用于写入信件正文;退出:用于退出发件程序;发送:用于发送邮件;关于:用于显示软件开发的相关信息。附件:可以手动添

12、加附件并完成发送(该功能正在进一步完善中) 。(为本小组另行添加的功能)(2)(2)电子邮件接收程序的主要模块电子邮件接收程序的主要模块电子邮件接收程序主要由以下几个模块组成:邮件服务器:用于填写需要收取信件信箱的服务器;帐号:用于填写需要收取信件的邮箱帐号;口令:用于填写需要收取信件的邮箱密码;邮件列表:显示邮箱中所有邮件的列表;正文:当选中邮件列表中任一邮件时,显示该封信件的具体内容;退出:用于退出接收邮件程序;收取:用于收取信件。第三章、程序测试(运行截图)第三章、程序测试(运行截图)3.13.1、添加、添加“关于关于”标签的测试标签的测试在原设计的基础上我添加了一个“关于”的标签,点击

13、该按钮会弹出一个小的对话框,其中的内容包括本小组的成员、程序开发时间以及一些关于邮件方面的相关帮助信息。程序的运行结果如图 1 所示。 vc+vc+课程设计课程设计 第 6 页图图 2 2 “关于关于”程序主界面程序主界面3.23.2、发送邮件的测试、发送邮件的测试图图 3 3 邮件发送主界面(不带附件)邮件发送主界面(不带附件) vc+vc+课程设计课程设计 第 7 页图图 4 4 发送邮件程序主界面(加载附件)发送邮件程序主界面(加载附件)图图 5 5 发送邮件程序主界面(带附件)发送邮件程序主界面(带附件) vc+vc+课程设计课程设计 第 8 页3.33.3、收取邮件的测试、收取邮件的

14、测试图图 6 6 收取电子邮件程序主界面收取电子邮件程序主界面第四章、设计总结第四章、设计总结4.14.1、课程小结、课程小结在邮件发送程序中,用户可以利用 smpt 服务器向朋友发送电子邮件,也可以直接尝试链接朋友的 e-mail 信箱所在的服务器。这次课程设计我所利用的 jmail 组件封装了很强的电子邮件处理功能,如附件传递、用户的跟踪服务、发布产品信息,以及电子报刊处理等功能。在邮件接受程序中,用户可以向 pop3 服务器收取电子邮件。用户打开邮箱后,将利用jmail 组件创建的对象指针遍历邮箱中的所有邮件,并将邮件信息下载存放于本地计算机中,利用 list 控件的扩展属性显示邮件的正

15、文内容。目前我所做的这个程序还不够完整,还存在着很多的不足和不完善的地方。归纳起来体现在以下几个方面: vc+vc+课程设计课程设计 第 9 页软件的功能趋于简单,真正的邮件收发工具软件包括很多方面的信息,而不仅仅局限于发送邮件和收取邮件。真正的邮件服务软件还包括邮件导入、邮件导出、文本编辑(查找与撤消) 、通讯簿、通讯规则等等功能。软件的图形操作功能缺乏,目前系统中对邮件附件的添加、删除功能都没有图形快捷操作,只能通过改变源程序中的代码达到添加附件的目的。而且由于时间和知识的欠缺,整个系统的界面显得过于单调,缺乏动态显示效果。如果能结合其它界面美化工具,使得界面更人性化,那就更好了。4.24

16、.2、个人小结、个人小结经过不懈的努力,终于完成了这次的课程设计。其实在做这次 vc+程序设计实验之前,我基本上没有真正意义上的接触过 vc+程序案例的设计和开发,只是通过课堂了解了一些关于 vc+的最基本的知识,所以这次实验是在边学习边实践的基础上完成的。由于知识的不足,做的结果自己不是很满意,与自己原来的设想也有些差距。但是我也从这两个星期的设计和制作过程中学到了很多知识,对自己以后的专业学习甚至将来的工作都有很大的帮助。附录(源代码):附录(源代码):1 1、 “关于关于”标签的程序代码标签的程序代码(1)(1)往头文件 stdafx.h 中添加下列代码:#define crlf x0d

17、x0a /注意这两行必须添加注意这两行必须添加#define crlf2 crlf crlf(2)(2)主要代码如下:bool caboutdlg:oninitdialog() cdialog:oninitdialog();/ todo:todo: addadd extraextra initializationinitialization hereherem_stredithelp= 相关帮助信息: crlfcrlf 一、 发送邮件服务器和发信人信箱有密切关系,假如你的信箱为 ,则发送邮件服务器一般为:,当然这也不是绝对的,你可以到你的邮件相关网站查询。不知道服务器名的话也可以不填! crl

18、fcrlf 二、 发信信箱格式比较灵活,如下两种格式均为合法的:1 在你的 e-mail 首尾加小于大于符号: 2 直接填写你的 e-mail: vc+vc+课程设计课程设计 第 10 页 crlfcrlf 三、 接受信箱可以为多个,中间用分号;隔开,例如:pookie;snuggles; 某些信箱前面的部分字符串是收信人名称,例如上面的 pookie 可以省略不写,例如下面一行和上面一行是等价的,它们都是可以接受的信箱输入格式。; crlfcrlf 四、 邮件主题,当然就是邮件的标题了,你可以随意输入自己喜爱的标题。crlf crlf 五、 邮件正文就是你要发给对方的信息。 crlfcrlf

19、 六、 最后不得不提一下,由于当今好多发送邮件服务器都要求身份验证,也就是需要提供的你的信箱密码,鉴于技术问题,这类信箱本程序暂时不支持。 crlfcrlf 周清 周庆 蒯志刚 于雯crlf 2007 年 7 月 crlf ; updatedata(false); / updateupdate thethe dialogdialogreturn true; / returnreturn truetrue unlessunless youyou setset thethe focusfocus toto a a controlcontrol / exception:exception: ocxo

20、cx propertyproperty pagespages shouldshould returnreturn falsefalse2 2、发送邮件程序代码:、发送邮件程序代码:(1)(1)往头文件 stdafx.h 中添加 jmail 对象的声明,这样才能在整个程序中应用 jmail 对象.代码如下:#import c:jmailjmail.dll /显示指定显示指定 jmailjmail 动态链接库动态链接库using namespace jmail; /定义程序中定义程序中 jmailjmail 对象的名称对象的名称(2)(2)头文件 mailserver.h,利用 classwiza

21、rd 类项导添加退出应用程序的函数exitinstnace().源代码如下:/ overrides/ classwizard generated virtual function overrides/afx_virtual(cmailserverapp)public:virtual bool initinstance();virtual int exitinstance();/afx_virtual vc+vc+课程设计课程设计 第 11 页(3)(3)源文件 mailserver.cpp,类 cmailserverapp 的实现文件.1)1)由于程序中应用了 jmail 组件,因此必须在 i

22、nitinstance()函数中添加如下代码,进行应用程序的初始化.bool cmailserverapp:initinstance()afxenablecontrolcontainer();:coinitialize(null);#ifdef _afxdllenable3dcontrols();/ call this when using mfc in a shared dll2)2)应用程序时,在 exitinstance()函数中添加释放各变量的代码./应用程序退出时int cmailserverapp:exitinstance() / todo: add your specialize

23、d code here and/or call the base classreturn cwinapp:exitinstance();:couninitialize();(4)(4)mailserverdlg.h 中,cmailserverdlg 类的接口.1)1)在头文件 mailserverdlg.h 中,添加各控件的控件变量,如下表所示.控件控件变量idc_edit_mailserverm_strmailserveridc_edit_recipientsm_strrecipientsidc_edit_senderm_strsenderidc_edit_subjectm_strsubje

24、ctidc_edit_bodym_strbody2)2)利用 classwizard 添加 idok 控件的 on_bn_clicked 事件函数,代码如下:protected:/afx_msg(cmailserverdlg)afx_msg void onsend();/afx_msg3)3)源文件 mailserverdlg.cpp,类 cmailserverdlg 的实现文件.打开mailserverdlg.cpp 文件,添加发送邮件函数 onsend()的代码如下:/发送邮件程序发送邮件程序void cmailserverdlg:onsend() / todo: add your con

25、trol notification handler code hereupdatedata();/获取 edit 控件中的字符串m_strmailserver.trimleft(); vc+vc+课程设计课程设计 第 12 页m_strmailserver.trimright();m_strrecipients.trimleft(); m_strrecipients.trimright();m_strsender.trimleft(); m_strsender.trimright();/判断 edit 控件中的字符串是否有效 if(m_strrecipients.getlength()3)af

26、xmessagebox(请填写正确的收件人信箱);return;if (m_strsender.getlength()from=(lpctstr) m_strsender;/发件人姓名pmessage-fromname=我的名字;/添加收件人pmessage-addrecipient(lpctstr)m_strrecipients,);/优先级设置,15 逐次降低,3 为中级pmessage-priority=3;/编码方式设置,默认是 iso-8859-1pmessage-charset = gb2312;/主题pmessage-subject = (lpctstr) m_strsubjec

27、t;/正文pmessage-body = (lpctstr) m_strbody;/开始发送pmessage-send(lpctstr) m_strmailserver,variant_false); pmessage.release();afxmessagebox(发送成功!);/捕捉异常catch (_com_error e)cstring strerr; vc+vc+课程设计课程设计 第 13 页strerr.format(错误信息: %srn 错误描述: %s , (lpctstr)e.errormessage() , (lpctstr)e.description(); afxmess

28、agebox(strerr);3 3、附件实现的代码:、附件实现的代码:附件发送的实现;附件发送的实现;(1 1)首先在 cmailserverdld 类中定义几个对象。 public: cstring str; cstring tr; bool strbool; _bstr_t bstr;(2 2)加载文件:void cmailserverdlg:onbtaddfile() / todo: add your control notification handler code herecfiledialog cg(true); if(cg.domodal()=idok) strbool=tru

29、e; else strbool=false;cg.domodal(); str=cg.getpathname();messagebox(str);(3 3)发送附件: bstr=str.allocsysstring(); /cstring 类型转换成_bstr_t 类型 if(strbool=true) /判断有没有打开附件 _bstr_t bstrcid = pmessage-addattachment( bstr, variant_true, ); /开始发送(带附件) pmessage-send(lpctstr) m_strmailserver,variant_false); pmess

30、age.release(); afxmessagebox(发送成功(带附件)!); else vc+vc+课程设计课程设计 第 14 页 /开始发送(不带附件) pmessage-send(lpctstr) m_strmailserver,variant_false); pmessage.release(); afxmessagebox(发送成功(不带附件)!);/捕捉异常catch (_com_error e) cstring strerr;strerr.format(错误信息: %srn 错误描述: %s , (lpctstr)e.errormessage() , (lpctstr)e.d

31、escription(); afxmessagebox(strerr);4 4、接受邮件程序代码:、接受邮件程序代码:(1)(1)往头文件 stdafx.h 中添加 jmail 对象的声明,这样才能在整个程序中应用 jmail对象.代码如下:/显示指定 jmail 动态链接库#import c:jmailjmail.dll /定义程序中 jmail 对象的名称using namespace jmail;(2)(2)头文件 mailserver.h,利用 classwizard 类项导添加退出应用程序的函数exitinstnace().源代码如下:/ overrides/ classwizard

32、 generated virtual function overrides/afx_virtual(cmailserverapp)public:virtual bool initinstance();virtual int exitinstance();/afx_virtual(3)(3)源文件 mailrecieve.cpp,类 cmailrecieveapp 的实现文件.1)1)由于程序中应用了 jmail 组件,因此必须在 initinstance()函数中添加如下代码,进行应用程序的初始化.bool cmailrevieveapp:initinstance()afxenablecont

33、rolcontainer();:coinitialize(null);#ifdef _afxdllenable3dcontrols();/ call this when using mfc in a shared dll vc+vc+课程设计课程设计 第 15 页2)2)应用程序时,在 exitinstance()函数中添加释放各变量的代码./应用程序退出时int cmailrecieveapp:exitinstance() / todo: add your specialized code here and/or call the base classreturn cwinapp:exiti

34、nstance();:couninitialize();(4)(4)mailrecievedlg.h 中,cmailrecievedlg 类的接口.1)1)在头文件 mailrecievedlg.h 中,添加各控件的控件变量,如下表所示.控件控件变量idc_edit_mailserverm_strmailserveridc_edit_messagesm_strcltmessageslistidc_edit_passwordm_strpasswordidc_edit_useridm_struserididc_edit_bodym_strbody2)2)利用 classwizard 添加 idok

35、 控件的 on_bn_clicked 事件函数,添加 list 控件的lvn_itemchange 事件函数.代码如下:protected:/afx_msg(cmailserverdlg)afx_msg void onrecieve();afx_msg void onshowbody(nmhdr* pnmhdr,lresult* presult);/afx_msg3)3)源文件 mailrecieverdlg.cpp,类 cmailrecievedlg 的实现文件.向mailserverdlg.cpp 文件中添加初始化对话框函数 oninitdialog()的代码、onrecieve()的代码

36、和显示邮件正文函数 onshowbody()的代码:bool cmailrecievedlg:oninitdialog() / todo: add extra initialization here/初始化对话框的函数/升级列表控件:sendmessage(m_ctlmessagelist.m_hwnd,lvm_setextendedlistviewstyle,lvs_ex_fullrowselect,lvs_ex_fullrowselect);/显示控件列表m_ctlmessagelist.insertcolumn(0,发件人,lvcfmt_left,120);m_ctlmessagelis

37、t.insertcolumn(1,主题,lvcfmt_left,350);m_ctlmessagelist.insertcolumn(2,日期,lvcfmt_left,100);return true; / return true unless you set the focus to a control:/接收邮件函数 vc+vc+课程设计课程设计 第 16 页void cmailrecievedlg:onrecieve() / todo: add your control notification handler code here/接受邮件的函数接受邮件的函数updatedata();/

38、格式化 edit 控件中的字符串 m_strmailserver.trimleft();m_strmailserver.trimright();m_struserid.trimleft();m_struserid.trimright();m_strpassword.trimleft();m_strpassword.trimright();/判断帐号口令是否存在if(m_strmailserver.getlength()=0)afxmessagebox(邮件服务器不能为空);return;if(m_struserid.getlength()timeout =30;/链接邮件服务器,110 为 pop3 默认端口号ppop3-connect( (lpctstr)m_struserid , (lpctstr)m_strpassword , (lpctstr)m_strmailserver,110); /获取信件pmessages=ppop3-me

温馨提示

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

评论

0/150

提交评论