VC++程序设计报告电子邮件发送和接收程序的开发班级:B电子051姓名:学号:指导老师:日期:2007年7月目录第一章需求分析 (2)1.1开发背景 (2)1.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)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)第一章、需求分析1.1、开发背景随着互联网的不断发展,越来越多的企业单位通过电子邮件来协同工作,打破时间与地域的限制,大大提高了工作效率。
电子邮件已地经成为人们生活中不可缺少的一部分。
但是,当前流行的各大邮件客户端软件除了最主要的收发信件之外,功能越来越复杂,但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不实用。
所以这次的VC++课程设计,我选择了制作一个操作简单,又可以实现最基本的电子邮件的收发功能的工具。
1.2、功能要求①基本发送和接受邮件的功能。
②实现通信功能。
③具有简单、实用、易操作的图形界面。
④在以上基础上尽量实现发送附件的功能。
⑤程序还应可以判断整个过程是否能正常运行,如果不正常运行,必须给出错误信息。
第二章、系统总体分析2.1、电子邮件介绍电子邮件又称E-mai1,是—种用电子手段提供信息交换的通信方式。
它是全球多种网络上使用最普遍的一项服务。
这种非交互式的通信,加速了信息的交流及数据传送,它是—个简易、快速的方法。
通过连接全世界的Internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。
到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mai1不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。
电子邮件的处理由两大部分组成:电子邮件发送程序和电子邮件接收程序。
电子邮件发送程序的发送方式有两种:第一种是本地计算机与用户所指定的发送邮件服务器连接,然后通过发送邮件服务器将邮件传递到接收邮件服务器,邮件中包含有信件的主题和内容等一系列信息;第二种是本地计算机直接与接收电子邮件的服务器相连,并将邮件送入收件者的邮箱中。
电子邮件接收程序则只需要处理本地计算机与存放电子邮件的服务器相连接,并通过帐号和口令从服务器中获取电子邮件,邮件中包含有信件的主题、内容和发送时间等。
2.2、总体设计方案及思路(1)电子邮件的发送程序发送邮件的程序必须能够做3件事情:①与接收电子邮件的服务器相连接;②将相关的信息送入收件人的信箱;③程序还应可以判断整个过程是否能正常运行,如果不正常运行,必须给出错误信息。
一般情况下,在VC++中,电子邮件程序的编写是利用Windows自带的MAPI以及相关的通信协议SMPT/POP3等来实现的。
但是要利用MAPI和通信协议实现一个功能强大的电子邮件管理程序,需要很强的相关专业知识。
随着现代软件业的发展,软件厂商提供了方便、简易,与服务器无关且稳定的电子邮件处理组件,使我们可以在程序开发语言中调用这些组件,利用很简单的语言实现功能强大的程序。
JMail组件就是一个很好用的电子邮件程序开发第三方组件。
所以这次的课程设计我选择了JMail组件。
JMail组件中包含许多实现电子邮件处理的属性和方法。
只需要在VC++代码中创建一个JMail组件的对象,调用其中的某些功能,就能很快完成程序的开发。
JMail常用的发送邮件的基本属性和方法如表1所示。
表1 JMail常用发送邮件的基本属性和方法由于JMail是第三方组件,因此VC++程序要想调用JMail对象,就必须先下载JMail 动态链接库,并在本机中进行注册。
具体操作方法如下:打开运行对话框,输入cmd,打开命令提示符编辑器,输入如下指令即可注册成功:(JMail组件的安装路径)regsvr32 jmail.dll(2)电子邮件的接收程序接收邮件的程序必须能够做三件事:①与存放电子邮件的服务器相连接;②读取相关的信件信息,并存放与本地计算机中;③程序还将判断整个过程是否能正常运行,如果不正常运行,必须给出错误信息。
与电子邮件发送程序的编写相同,我还是采取VC++语言和JMail组件相结合的方法来实现邮件的收取。
JMail常用的接收邮件的基本属性和方法如表2所示。
表2 JMail常用接收信件的基本属性和方法2.3、模块分析电子子邮件接受方式程序主要由以下两个大的模块构成:发送邮件模块和收取邮件模块。
其功能模块如图1所示:图1 电子邮件功能模块图(1)电子邮件发送程序的主要模块电子邮件发送程序主要由以下几个模块组成:①邮件服务器:用于填写收件人的邮箱服务器(可以不填);②收件人信箱:用于填写收件人的邮箱名;③发件人信箱:用于填写发件人的邮箱名;④主题:用于填写信件主题;⑤正文:用于写入信件正文;⑥退出:用于退出发件程序;⑦发送:用于发送邮件;⑧关于:用于显示软件开发的相关信息。
⑨附件:可以手动添加附件并完成发送(该功能正在进一步完善中)。
(⑧⑨为本小组另行添加的功能)(2)电子邮件接收程序的主要模块电子邮件接收程序主要由以下几个模块组成:①邮件服务器:用于填写需要收取信件信箱的服务器;②帐号:用于填写需要收取信件的邮箱帐号;③口令:用于填写需要收取信件的邮箱密码;④邮件列表:显示邮箱中所有邮件的列表;⑤正文:当选中邮件列表中任一邮件时,显示该封信件的具体内容;⑥退出:用于退出接收邮件程序;⑦收取:用于收取信件。
第三章、程序测试(运行截图)3.1、添加“关于”标签的测试在原设计的基础上我添加了一个“关于”的标签,点击该按钮会弹出一个小的对话框,其中的内容包括本小组的成员、程序开发时间以及一些关于邮件方面的相关帮助信息。
程序的运行结果如图1所示。
图2 “关于”程序主界面3.2、发送邮件的测试图3 邮件发送主界面(不带附件)图4 发送邮件程序主界面(加载附件)图5 发送邮件程序主界面(带附件)3.3、收取邮件的测试图6 收取电子邮件程序主界面第四章、设计总结4.1、课程小结在邮件发送程序中,用户可以利用SMPT服务器向朋友发送电子邮件,也可以直接尝试链接朋友的E-mail信箱所在的服务器。
这次课程设计我所利用的JMail组件封装了很强的电子邮件处理功能,如附件传递、用户的跟踪服务、发布产品信息,以及电子报刊处理等功能。
在邮件接受程序中,用户可以向POP3服务器收取电子邮件。
用户打开邮箱后,将利用JMail组件创建的对象指针遍历邮箱中的所有邮件,并将邮件信息下载存放于本地计算机中,利用List控件的扩展属性显示邮件的正文内容。
目前我所做的这个程序还不够完整,还存在着很多的不足和不完善的地方。
归纳起来体现在以下几个方面:①软件的功能趋于简单,真正的邮件收发工具软件包括很多方面的信息,而不仅仅局限于发送邮件和收取邮件。
真正的邮件服务软件还包括邮件导入、邮件导出、文本编辑(查找与撤消)、通讯簿、通讯规则等等功能。
②软件的图形操作功能缺乏,目前系统中对邮件附件的添加、删除功能都没有图形快捷操作,只能通过改变源程序中的代码达到添加附件的目的。
而且由于时间和知识的欠缺,整个系统的界面显得过于单调,缺乏动态显示效果。
如果能结合其它界面美化工具,使得界面更人性化,那就更好了。
4.2、个人小结经过不懈的努力,终于完成了这次的课程设计。
其实在做这次VC++程序设计实验之前,我基本上没有真正意义上的接触过VC++程序案例的设计和开发,只是通过课堂了解了一些关于VC++的最基本的知识,所以这次实验是在边学习边实践的基础上完成的。
由于知识的不足,做的结果自己不是很满意,与自己原来的设想也有些差距。
但是我也从这两个星期的设计和制作过程中学到了很多知识,对自己以后的专业学习甚至将来的工作都有很大的帮助。
附录(源代码):1、“关于”标签的程序代码(1)往头文件StdAfx.h中添加下列代码:#define CRLF "\x0d\x0a" //注意这两行必须添加#define CRLF2 CRLF CRLF(2)主要代码如下:BOOL CAboutDlg::OnInitDialog(){CDialog::OnInitDialog();// TODO: Add extra initialization herem_strEditHelp= "相关帮助信息:"CRLFCRLF" 一、发送邮件服务器和发信人信箱有密切关系,假如你的信箱为loop@,则发送邮件服务器一般为:,当然这也不是绝对的,你可以到你的邮件相关网站查询。
不知道服务器名的话也可以不填!"CRLFCRLF" 二、发信信箱格式比较灵活,如下两种格式均为合法的:1 在你的E-Mail首尾加小于大于符号:<loomman@> 2 直接填写你的E-Mail:loomman@ "CRLFCRLF" 三、接受信箱可以为多个,中间用分号;隔开,例如:Pookie<pookie@>;snuggles<snuggles@>;<loomman@> 某些信箱前面的部分字符串是收信人名称,例如上面的Pookie可以省略不写,例如下面一行和上面一行是等价的,它们都是可以接受的信箱输入格式。
<pookie@>;<snuggles@>;<loomman@>"CRLFCRLF" 四、邮件主题,当然就是邮件的标题了,你可以随意输入自己喜爱的标题。
"CRLFCRLF" 五、邮件正文就是你要发给对方的信息。
"CRLFCRLF" 六、最后不得不提一下,由于当今好多发送邮件服务器都要求身份验证,也就是需要提供的你的信箱密码,鉴于技术问题,这类信箱本程序暂时不支持。
"CRLFCRLF" 周清周庆蒯志刚于雯"CRLF" 2007年7月"CRLF;UpdateData(FALSE); // Update the Dialogreturn TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE}2、发送邮件程序代码:(1)往头文件StdAfx.h中添加JMail对象的声明,这样才能在整个程序中应用JMail对象.代码如下:#import "C:\jmail\jmail.dll" //显示指定JMail动态链接库using namespace jmail; //定义程序中JMail对象的名称(2)头文件MailServer.h,利用ClassWizard类项导添加退出应用程序的函数ExitInstnace().源代码如下:// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CMailServerApp)public:virtual BOOL InitInstance();virtual int ExitInstance();//}}AFX_VIRTUAL(3)源文件MailServer.cpp,类CMailServerApp的实现文件.1)由于程序中应用了JMail组件,因此必须在InitInstance()函数中添加如下代码,进行应用程序的初始化.BOOL CMailServerApp::InitInstance(){AfxEnableControlContainer();::CoInitialize(NULL);#ifdef _AFXDLLEnable3dControls(); // Call this when using MFC in a shared DLL ……}2)应用程序时,在ExitInstance()函数中添加释放各变量的代码.//应用程序退出时int CMailServerApp::ExitInstance(){// TODO: Add your specialized code here and/or call the base classreturn CWinApp::ExitInstance();::CoUninitialize();}(4)MailServerDlg.h中,CMailServerDlg类的接口.2)利用ClassWizard添加IDOK控件的ON_BN_CLICKED事件函数,代码如下: Protected://{{AFX_MSG(CMailServerDlg)……Afx_msg void OnSend();//}}AFX_MSG……3)源文件MailServerDlg.cpp,类CMailServerDlg的实现文件.打开MailServerDlg.cpp 文件,添加发送邮件函数OnSend()的代码如下://发送邮件程序void CMailServerDlg::OnSend(){// TODO: Add your control notification handler code hereUpdateData();//获取Edit控件中的字符串m_strmailserver.TrimLeft();m_strmailserver.TrimRight();m_strrecipients.TrimLeft();m_strrecipients.TrimRight();m_strsender.TrimLeft();m_strsender.TrimRight();//判断Edit控件中的字符串是否有效if(m_strrecipients.GetLength()<3){AfxMessageBox("请填写正确的收件人信箱");return;}if (m_strsender.GetLength()<=0){AfxMessageBox("请填写发件人邮箱");return;}//发送邮件过程try{//创建一个JMail对象,这样便可以利用其内容封装的基本属性和方法jmail::IMessagePtr pMessage("JMail.Message");//发件人邮箱pMessage->From=(LPCTSTR) m_strsender;//发件人姓名pMessage->FromName="我的名字";//添加收件人pMessage->AddRecipient((LPCTSTR)m_strrecipients,"","");//优先级设置,1~5逐次降低,3为中级pMessage->Priority=3;//编码方式设置,默认是iso-8859-1pMessage->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;strErr.Format("错误信息: %s\r\n 错误描述: %s ", (LPCTSTR)e.ErrorMessage() , (LPCTSTR)e.Description());AfxMessageBox(strErr);}}3、附件实现的代码:附件发送的实现;(1)首先在CMailServerDld类中定义几个对象。