已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计报告程序设计报告 电子邮件发送和接收程序 的开发 班班 级级: : 电电子子 姓姓 名:名: 学学 号:号: 指指导导老老师师: : 日日 期:期: 2007 年年 7 月月 vc+课课程程设计设计 第 1 页 目目 录录 第一章第一章 需需求求分分析析 2 2 1.1 开发背景 2 1.2 功能要求 2 第二章第二章 系统总体分析系统总体分析 2 2 2.1 电子邮件介绍2 2.2 总体设计方案及思路3 2.2.1 电子邮件的发送程序3 2.2.2 电子邮件的接收程序4 2.3 模块分析4 2.3.1 电子邮件发送程序的主要模块5 2.3.2 电子邮件接收程序的主要模块5 第三章第三章 程序的测试(运行截图)程序的测试(运行截图) 5 5 3.1 添加“关于”标签的测试 5 3.2 发送邮件的测试 6 3.3 收取邮件的测试8 第四章第四章 设设计计总结总结 .8 4.1 课程小结8 4.2 个人小结9 附录附录 (源代码)(源代码) .9 1 “关于”标签的程序代码 9 2 电子邮件发送程序的代码.10 3 附件的代码.13 3 电子邮件接受程序的代码.14 vc+课课程程设计设计 第 2 页 第一章、需求分析第一章、需求分析 1.1、开、开发发背景背景 随着互联网的不断发展,越来越多的企业单位通过电子邮件来协同工作,打破时间与地 域的限制,大大提高了工作效率。电子邮件已地经成为人们生活中不可缺少的一部分。 但是,当前流行的各大邮件客户端软件除了最主要的收发信件之外,功能越来越复杂, 但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说, 更加显得太过于华丽而不实用。所以这次的课程设计,我选择了制作一个操作简 单,又可以实现最基本的电子邮件的收发功能的工具。 1.2、功能要求、功能要求 基本发送和接受邮件的功能。 实现通信功能。 具有简单、实用、易操作的图形界面。 在以上基础上尽量实现发送附件的功能。 程序还应可以判断整个过程是否能正常运行,如果不正常运行,必须给出错误信息。 第二章、系第二章、系统总统总体分析体分析 2.1、 、电电子子邮邮件介件介绍绍 电子邮件又称 e-mai1,是种用电子手段提供信息交换的通信方式。它是全球多种网 络上使用最普遍的一项服务。这种非交互式的通信,加速了信息的交流及数据传送,它是 个简易、快速的方法。通过连接全世界的 internet,实现各类信号的传送、接收、存贮等 处理,将邮件送到世界的各个角落。到目前为止,可以说电子邮件是 internet 资源使用最多 的一种服务,e-mai1 不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不 同类型的信息。 电子邮件的处理由两大部分组成:电子邮件发送程序和电子邮件接收程序。电子邮件 发送程序的发送方式有两种:第一种是本地计算机与用户所指定的发送邮件服务器连接, 然后通过发送邮件服务器将邮件传递到接收邮件服务器,邮件中包含有信件的主题和内容 等一系列信息;第二种是本地计算机直接与接收电子邮件的服务器相连,并将邮件送入收件 者的邮箱中。电子邮件接收程序则只需要处理本地计算机与存放电子邮件的服务器相连接, 并通过帐号和口令从服务器中获取电子邮件,邮件中包含有信件的主题、内容和发送时间 等。 vc+课课程程设计设计 第 3 页 2.2、 、总总体体设计设计方案及思路方案及思路 (1)电电子子邮邮件的件的发发送程序送程序 发送邮件的程序必须能够做 3 件事情: 与接收电子邮件的服务器相连接; 将相关的信息送入收件人的信箱; 程序还应可以判断整个过程是否能正常运行,如果不正常运行,必须给出错误信息。 一般情况下,在中,电子邮件程序的编写是利用自带的 以及相关的通信协议 smpt/pop3 等来实现的。但是要利用 mapi 和通信协议实现一 个功能强大的电子邮件管理程序,需要很强的相关专业知识。随着现代软件业的发展,软 件厂商提供了方便、简易,与服务器无关且稳定的电子邮件处理组件,使我们可以在程序 开发语言中调用这些组件,利用很简单的语言实现功能强大的程序。jmail 组件就是一个 很好用的电子邮件程序开发第三方组件。所以这次的课程设计我选择了组件。 jmail 组件中包含许多实现电子邮件处理的属性和方法。只需要在 vc+代码中创建一 个 jmail 组件的对象,调用其中的某些功能,就能很快完成程序的开发。jmail 常用的发 送邮件的基本属性和方法如表 1 所示。 表表 1 jmail 常用常用发发送送邮邮件的基本属性和方法件的基本属性和方法 方法和属性功能 body 邮件内容 charset 字符集,默认为“us-ascii” sendname 发送人姓名 sender 发送人邮箱地址 serveraddress smpt 服务器地址,可制定多个,用分号 分开,并可指定端口;为空白时,jmail 会尝试解决远程邮件服务器,然后直接发 送。 subject 标题 priority 优先级(1:高优先级;3:普通优先级; 5:低优先级) addattachment(“filename”,contenttype) 添加文件附件 addcustomattachment(“filename”,data) 添加自定义附件 addurlattachment (“bstrurl”,“bstrattachas”,bstrauth) 下载并添加一个来自 bstrurl 的附件, bstrattachas 指定受到信件的文件名。 addrecipient(“email-address”) 增加一个收件人 addrecipientex(“email- address”,“name”) 增加一个带名字的收件人 appendbodyfromfile(“filename”) 将一个文件追加到正文后 appendtext(“text”) 追加信的正文内容 execute()方法执行发送 close()方法强制 jmail 关闭缓冲与邮件服务器的连接 vc+课课程程设计设计 第 4 页 由于 jmail 是第三方组件,因此 vc+程序要想调用 jmail 对象,就必须先下载 jmail 动态链接库,并在本机中进行注册。具体操作方法如下:打开运行对话框,输入 cmd,打 开命令提示符编辑器,输入如下指令即可注册成功:(jmail 组件的安装路径)regsvr32 jmail.dll (2)电电子子邮邮件的接收程序件的接收程序 接收邮件的程序必须能够做三件事: 与存放电子邮件的服务器相连接; 读取相关的信件信息,并存放与本地计算机中; 程序还将判断整个过程是否能正常运行,如果不正常运行,必须给出错误信息。 与电子邮件发送程序的编写相同,我还是采取 vc+语言和 jmail 组件相结合的方法来 实现邮件的收取。jmail 常用的接收邮件的基本属性和方法如表 2 所示。 表表 2 jmail 常用接收信件的基本属性和方法常用接收信件的基本属性和方法 方法和属性功能 body 邮件内容 charset 字符集,默认为(us-ascii) date 信件发送日期 mailserver 邮箱所在的服务器 subject 标题 timeout 连接服务器的超时限制 connect() 连接服务器,需要参数:帐号、口令、服 务器地址、端口 2.3、模、模块块分析分析 电子子邮件接受方式程序主要由以下两个大的模块构成:发送邮件模块和收取邮件模 块。其功能模块如图 1 所示: 电子邮件客户应用系统 发 送 邮 件 接 收 邮 件 vc+课课程程设计设计 第 5 页 图图 1 电电子子邮邮件功能模件功能模块图块图 (1)电电子子邮邮件件发发送程序的主要模送程序的主要模块块 电子邮件发送程序主要由以下几个模块组成: 邮件服务器:用于填写收件人的邮箱服务器(可以不填) ; 收件人信箱:用于填写收件人的邮箱名; 发件人信箱:用于填写发件人的邮箱名; 主题:用于填写信件主题; 正文:用于写入信件正文; 退出:用于退出发件程序; 发送:用于发送邮件; 关于:用于显示软件开发的相关信息。 附件:可以手动添加附件并完成发送(该功能正在进一步完善中) 。 (为本小组另行添加的功能) (2)电电子子邮邮件接收程序的主要模件接收程序的主要模块块 电子邮件接收程序主要由以下几个模块组成: 邮件服务器:用于填写需要收取信件信箱的服务器; 帐号:用于填写需要收取信件的邮箱帐号; 口令:用于填写需要收取信件的邮箱密码; 邮件列表:显示邮箱中所有邮件的列表; 正文:当选中邮件列表中任一邮件时,显示该封信件的具体内容; 退出:用于退出接收邮件程序; 收取:用于收取信件。 第三章、程序第三章、程序测试测试(运行截(运行截图图) ) 3.1、添加、添加“关于关于”标签标签的的测试测试 在原设计的基础上我添加了一个“关于”的标签,点击该按钮会弹出一个小的对话框, 其中的内容包括本小组的成员、程序开发时间以及一些关于邮件方面的相关帮助信息。程 序的运行结果如图 1 所示。 vc+课课程程设计设计 第 6 页 图图 2 “关于关于”程序主界面程序主界面 3.2、 、发发送送邮邮件的件的测试测试 图图 3 邮邮件件发发送主界面(不送主界面(不带带附件)附件) vc+课课程程设计设计 第 7 页 图图 4 发发送送邮邮件程序主界面(加件程序主界面(加载载附件)附件) 图图 5 发发送送邮邮件程序主界面(件程序主界面(带带附件)附件) vc+课课程程设计设计 第 8 页 3.3、收取、收取邮邮件的件的测试测试 图图 6 收取收取电电子子邮邮件程序主界面件程序主界面 第四章、第四章、设计总结设计总结 4.1、 、课课程小程小结结 在邮件发送程序中,用户可以利用 smpt 服务器向朋友发送电子邮件,也可以直接尝试 链接朋友的 e-mail 信箱所在的服务器。这次课程设计我所利用的 jmail 组件封装了很强的 电子邮件处理功能,如附件传递、用户的跟踪服务、发布产品信息,以及电子报刊处理等 功能。 在邮件接受程序中,用户可以向 pop3 服务器收取电子邮件。用户打开邮箱后,将利用 jmail 组件创建的对象指针遍历邮箱中的所有邮件,并将邮件信息下载存放于本地计算机 中,利用 list 控件的扩展属性显示邮件的正文内容。 目前我所做的这个程序还不够完整,还存在着很多的不足和不完善的地方。归纳起来 体现在以下几个方面: vc+课课程程设计设计 第 9 页 软件的功能趋于简单,真正的邮件收发工具软件包括很多方面的信息,而不仅仅局 限于发送邮件和收取邮件。真正的邮件服务软件还包括邮件导入、邮件导出、文本编辑 (查找与撤消) 、通讯簿、通讯规则等等功能。 软件的图形操作功能缺乏,目前系统中对邮件附件的添加、删除功能都没有图形快 捷操作,只能通过改变源程序中的代码达到添加附件的目的。而且由于时间和知识的欠缺, 整个系统的界面显得过于单调,缺乏动态显示效果。如果能结合其它界面美化工具,使得 界面更人性化,那就更好了。 4.2、个人小、个人小结结 经过不懈的努力,终于完成了这次的课程设计。其实在做这次 vc+程序设计实验之前, 我基本上没有真正意义上的接触过 vc+程序案例的设计和开发,只是通过课堂了解了一些 关于 vc+的最基本的知识,所以这次实验是在边学习边实践的基础上完成的。由于知识的 不足,做的结果自己不是很满意,与自己原来的设想也有些差距。但是我也从这两个星期 的设计和制作过程中学到了很多知识,对自己以后的专业学习甚至将来的工作都有很大的 帮助。 附附录录(源代(源代码码):): 1、 、 “关于关于”标签标签的程序代的程序代码码 (1)(1)往头文件 stdafx.h 中添加下列代码: #define crlf “x0dx0a“ /注意这两行必须添加注意这两行必须添加 #define crlf2 crlf crlf (2)(2)主要代码如下: bool caboutdlg:oninitdialog() cdialog:oninitdialog(); / todo:todo: addadd extraextra initializationinitialization herehere m_stredithelp= “相关帮助信息:“ crlf crlf “ 一、 发送邮件服务器和发信人信箱有密切关系,假如你的信箱为 , 则发送邮件服务器一般为:,当然这也不是绝对的,你可以到你的邮件相关网 站查询。不知道服务器名的话也可以不填!“ crlf crlf “ 二、 发信信箱格式比较灵活,如下两种格式均为合法的:1 在你的 e-mail 首尾 加小于大于符号: 2 直接填写你的 e-mail: “ vc+课课程程设计设计 第 10 页 crlf crlf “ 三、 接受信箱可以为多个,中间用分号;隔开,例如: pookie;snuggles; 某些信箱前面的部分字符串是收信人名称,例如上面的 pookie 可以省略不写,例如下面一 行和上面一行是等价的,它们都是可以接受的信箱输入格式。 ;“ crlf crlf “ 四、 邮件主题,当然就是邮件的标题了,你可以随意输入自己喜爱的标题。“ crlf crlf “ 五、 邮件正文就是你要发给对方的信息。“ crlf crlf “ 六、 最后不得不提一下,由于当今好多发送邮件服务器都要求身份验证,也就 是需要提供的你的信箱密码,鉴于技术问题,这类信箱本程序暂时不支持。“ crlf crlf “ 周清 周庆 蒯志刚 于雯“ crlf “ 2007 年 7 月“ crlf ; updatedata(false); / updateupdate thethe dialogdialog return true; / returnreturn truetrue unlessunless youyou setset thethe focusfocus toto a a controlcontrol / exception:exception: ocxocx propertyproperty pagespages shouldshould returnreturn falsefalse 2、 、发发送送邮邮件程序代件程序代码码: : (1)(1)往头文件 stdafx.h 中添加 jmail 对象的声明,这样才能在整个程序中应用 jmail 对 象.代码如下: #import “c:jmailjmail.dll“ /显示指定显示指定 jmailjmail 动态链接库动态链接库 using namespace jmail; /定义程序中定义程序中 jmailjmail 对象的名称对象的名称 (2)(2)头文件 mailserver.h,利用 classwizard 类项导添加退出应用程序的函数 exitinstnace().源代码如下: / overrides / classwizard generated virtual function overrides /afx_virtual(cmailserverapp) public: virtual bool initinstance(); virtual int exitinstance(); /afx_virtual vc+课课程程设计设计 第 11 页 (3)(3)源文件 mailserver.cpp,类 cmailserverapp 的实现文件. 1)1)由于程序中应用了 jmail 组件,因此必须在 initinstance()函数中添加如下代码,进 行应用程序的初始化. bool cmailserverapp:initinstance() afxenablecontrolcontainer(); :coinitialize(null); #ifdef _afxdll enable3dcontrols();/ call this when using mfc in a shared dll 2)2)应用程序时,在 exitinstance()函数中添加释放各变量的代码. /应用程序退出时 int cmailserverapp:exitinstance() / todo: add your specialized code here and/or call the base class return cwinapp:exitinstance(); :couninitialize(); (4)(4)mailserverdlg.h 中,cmailserverdlg 类的接口. 1)1)在头文件 mailserverdlg.h 中,添加各控件的控件变量,如下表所示. 控件控件变量 idc_edit_mailserverm_strmailserver idc_edit_recipientsm_strrecipients idc_edit_senderm_strsender idc_edit_subjectm_strsubject idc_edit_bodym_strbody 2)2)利用 classwizard 添加 idok 控件的 on_bn_clicked 事件函数,代码如下: protected: /afx_msg(cmailserverdlg) afx_msg void onsend(); /afx_msg 3)3)源文件 mailserverdlg.cpp,类 cmailserverdlg 的实现文件.打开 mailserverdlg.cpp 文件,添加发送邮件函数 onsend()的代码如下: /发送邮件程序发送邮件程序 void cmailserverdlg:onsend() / todo: add your control notification handler code here updatedata(); /获取 edit 控件中的字符串 m_strmailserver.trimleft(); vc+课课程程设计设计 第 12 页 m_strmailserver.trimright(); m_strrecipients.trimleft(); m_strrecipients.trimright(); m_strsender.trimleft(); m_strsender.trimright(); /判断 edit 控件中的字符串是否有效 if(m_strrecipients.getlength()from=(lpctstr) m_strsender; /发件人姓名 pmessage-fromname=“我的名字“; /添加收件人 pmessage-addrecipient(lpctstr)m_strrecipients,“,“); /优先级设置,15 逐次降低,3 为中级 pmessage-priority=3; /编码方式设置,默认是 iso-8859-1 pmessage-charset = “gb2312“; /主题 pmessage-subject = (lpctstr) m_strsubject; /正文 pmessage-body = (lpctstr) m_strbody; /开始发送 pmessage-send(lpctstr) m_strmailserver,variant_false); pmessage.release(); afxmessagebox(“发送成功!“); /捕捉异常 catch (_com_error e) cstring strerr; vc+课课程程设计设计 第 13 页 strerr.format(“错误信息: %srn 错误描述: %s “, (lpctstr) e.errormessage() , (lpctstr)e.description(); afxmessagebox(strerr); 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 here cfiledialog cg(true); if(cg.domodal()=idok) strbool=true; 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); pmessage.release(); afxmessagebox(“发送成功(带附件)!“); else 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.description(); afxmessagebox(strerr); 4、接受、接受邮邮件程序代件程序代码码: : (1)(1)往头文件 stdafx.h 中添加 jmail 对象的声明,这样才能在整个程序中应用 jmail 对象.代码如下: /显示指定 jmail 动态链接库 #import “c:jmailjmail.dll“ /定义程序中 jmail 对象的名称 using namespace jmail; (2)(2)头文件 mailserver.h,利用 classwizard 类项导添加退出应用程序的函数 exitinstnace().源代码如下: / overrides / classwizard 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() afxenablecontrolcontainer(); :coinitialize(null); #ifdef _afxdll enable3dcontrols();/ call this when using mfc in a shared dll vc+课课程程设计设计 第 15 页 2)2)应用程序时,在 exitinstance()函数中添加释放各变量的代码. /应用程序退出时 int cmailrecieveapp:exitinstance() / todo: add your specialized code here and/or call the base class return cwinapp:exitinstance(); :couninitialize(); (4)(4)mailrecievedlg.h 中,cmailrecievedlg 类的接口. 1)1)在头文件 mailrecievedlg.h 中,添加各控件的控件变量,如下表所示. 控件控件变量 idc_edit_mailserverm_strmailserver idc_edit_messagesm_strcltmessageslist idc_edit_passwordm_strpassword idc_edit_useridm_struserid idc_edit_bodym_strbody 2)2)利用 classwizard 添加 idok 控件的 on_bn_clicked 事件函数,添加 list 控件的 lvn_itemchange 事件函数.代码如下: protected: /afx_msg(cmailserverdlg) afx_msg void onrecieve(); afx_msg void onshowbody(nmhdr* pnmhdr,lresult* presult); /afx_msg 3)3)源文件 mailrecieverdlg.cpp,类 cmailrecievedlg 的实现文件.向 mailserverdlg.cpp 文件中添加初始化对话框函数 oninitdialog()的代码、onrecieve()的 代码和显示邮件正文函数 onshowbody()的代码: bool cmailrecievedlg:oninitdialog() / todo: add extra initialization here /初始化对话框的函数 /升级列表控件 :sendmessage(m_ctlmessagelist.m_hwnd,lvm_setextendedlistviewstyle,lvs_ex_f ullrowselect,lvs_ex_fullrowselect); /显示控件列表 m_ctlmessagelist.insertcolumn(0,“发件人“,lvcfmt_left,120); m_ctlmessagelist.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+课课程程设计设计 第 16 页 void cmailrecievedlg:onrecieve() / todo: add your control notification handler code here /接受邮件的函数接受邮件的函数 updatedata(); /格式化 edit 控件中的字符串 m_strmailserver.trimleft(); m_strmailserver.trimright(); m_struserid.trimleft(); m_struserid.trimright(); m_strpassword.trimleft(); m_strpassword.trimright(); /判断帐号口令是否存在 if(m_strmailserver.getlength()timeout =30; /链接邮件服务器,110 为 pop3 默认端口号 ppop3-connect( (lpctstr)m_struserid , (lpctstr)m_strpassword , (lpctstr)m_strmailserver,110); /获取信件 pmessages=ppop3-messages; /已下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年呼叫中心行业研究报告及未来五至十年技术突破与应用落地
- 2025-2026年江苏版小学科学四年级卷
- 2025-2026物理高三测试卷苏教版
- 2025-2026年苏教版高三物理上学期测验卷
- 爱情至上的教学课件
- 2026年七年级上册第4章 一元一次方程 第9套 拓展拔高
- 2026年医学拉丁语专业医学拉丁语评估测试试卷及答案
- 2026年医学护理学老年护理服务试题及答案
- 美国调整AI出口管制规则新监管理念带来新挑战 -
- 安全主管竞聘模板
- 《中国教育史》孙培青1
- 雨课堂学堂云在线《经典与思考-人文清华大师面对面 》单元测试考核答案
- T-ACRI 0049-2025 锂离子电池正极材料烧结用匣钵
- e基建2.0成功施工方案
- 草原有害生物防治项目施工方案
- 透析患者病历汇报
- 贵州家乡介绍课件
- 2025榆林能源集团有限公司招聘工作人员(473人)笔试参考题库附带答案详解
- 景区开发战略框架协议书
- 互联网骨干直联点监测系统项目需求
- 基于HAL库的STM32F1开发实践教程-课件全套 第1-11章 GPIO输出-云平台接入(485、CAN、云平台)
评论
0/150
提交评论