软件课程设计实验报告课题:电子邮件客户端管理软件班级:作者:学号:指导老师:课设评价:课设成绩:1、需求分析1、描述:本课题的最终目的是设计一个基于windows平台的电子邮件管理软件,实现对电子邮件的收发及往来邮件的管理功能。
2、软件基本要求a)有图形界面;b)简单邮件接收;c)简单邮件发送;d)简单邮件转发;e)邮件管理:浏览(显示邮件发送者、发送时间、邮件内容)、删除和查找。
3、可选要求a)带附件邮件接收和发送;b)多接收者发送;c)通信簿管理:增加、修改、删除、导入、导出;d)邮件夹管理:增加、修改和删除;e)邮件管理增强功能:邮件排序(按发信人、主题、日期等),邮件检索(按发信人、主题、内容等);f)提供更良好的操作界面;g)其他功能。
2、 总体方案设计说明其中,阅读邮件模块的功能如下:A.邮件传输机制及通信协议简析本实验所设计的软件基于smtp,pop3邮件通信协议。
登录写信发送存草稿添加收件人添加附件收件箱收件删除选中阅读发件箱删除选中阅读草稿箱删除选中阅读垃圾箱彻底删除恢复阅读通讯录添加联系人添加分组编辑选中删除选中阅读保存联系人添加联系人下载选中附件删除邮件转发写信回复写信S MTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
SMTP 协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。
通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。
SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
P OP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。
它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
POP3协议是TCP/IP协议族中的一员,,由RFC 1939 定义。
本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。
B.Jmail组件的运用jmail是一个第三方邮件操作组件,通常位于web服务器端,和站点程序紧密配合来接收及提交邮件到邮件服务器的控件,让网站拥有发送邮件既接收邮件的功能。
与此相同的还有CDONTS.NewMail,Persits.MailSender, IISmail.Iismail等等,他们唯一区别就是jmail只需要注册一个dll组件即可被调用,而其他则需要在iis上设置发布smtp服务器。
特点:1)可以发送附件;2)详细日志能力,便于你查看问题所在;3)设置邮件发送的优先级;4)支持多种格式的邮件发送,比如说以HTML或者TXT的方式发送邮件。
这是个免费的组件。
5)密件发送/(CC)抄送/紧急信件发送能力;6)最关键的就是--免费的组件,不必花钱,所以非常值得使用。
C.Microsoft Visual C++ 6.0Visual C++ 6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
Visual C++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了 Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。
所以实际中,更多的是以Visual C++6.0为平台。
Visual C++6.0不仅是一个C++ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。
Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。
这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境D.VC++的MFC类库MFC(Microsoft Foundation Classes),是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
1)MFC的主要优点:可以用面向对象的方法来调用Windows API,以及应用程序开发的便捷。
MFC将很多应用程序开发中常用的功能自动化,并且提供了文档框架视图结构和活动文档这样的便于自定义的应用程序框架。
同时,在Visual C++内部也内建了很多对MFC的例如类向导这样的支持以减少软件开发的时间,使用类向导可以生成从hello world这样的简单程序到活动文档服务器这样的复杂程序。
MFC的消息映射机制也避免了使用性能较低的庞大虚函数表。
2)MFC之对话框1. 利用VisualC++新建一个对话框2. 对话框类的继承特性:Cobject->Ccmdtarget->Cwnd-> //由cwnd派生,是一个窗口类cdialog在VC++ 中,一个窗口与一个C++类进行关联,对话框的基类为CDialog 类。
对话框分为模态对话框与非模态对话框,模态对话框在应用程序能进行其它操作之前必须关闭,非模态的对话框允许不关闭对话框而进行应用程序操作.3. 创建对话框类确定选中新添加的对话框,View ---> ClassWizard 创建一个基于CDialog 的类与本对话框关联,输入类名,文件名,基类名,对话框ID 。
4. 创建对话框a.模态对话框利用DoModal() //调用domodal()创建一个模态的对话框,它的返回值是做为cdialog::enddailog成员函数的参数,这个参数用来关闭对话框。
b.非模态对话框:利用CDialog::Create()。
virtual BOOL Create(UINT nIDTemplate, //对话框ID号CWnd* pParentWnd = NULL //对话框父窗口C++对象指针);//Initializes the CDialog object. Creates a modeless dialog box and attaches it to the CDialog object.注意:在调用Create()之后,必须调用ShowWindow()函数将其显示出来,BOOL ShowWindow(int nCmdShow ); //Sets the visibility state of the window注意,在创建非模态对话框是,必须注意对话框对象的生命周期,因为在显示对话框时,程序是一直在运行的,但是如果定义为局部的非模态对话框,在其生命周期结束之后就会被销毁。
3)MFC之基本控件E. 数据库访问技术——ADO(1)简介:ADO (ActiveX Data Objects)是一个用于访问数据源的COM组件。
它提供了编程语言和统一数据访问方式OLE DB的一个中间层。
允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。
访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。
ADO包含一些顶层的对象:连接(Connection),代表到数据库的连接记录集(Recordset),代表数据库记录的一个集合命令(Command),代表一个SQL命令记录(Record),代表数据的一个集合流(Stream),代表数据的顺序集合错误(Error),代表数据库访问中产生的意外字段(Field),代表一个数据库字段参数(Parameter),代表一个SQL参数属性(Property),保存对象的信息(2)结构化查询语言——SQL结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。
它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。
结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
3、详细设计说明a)登录模块插入对话框并设置控件:创建新的对话框类:Center其他设置:添加全局变量://用于登录和连接的信息CString mailuser; //邮箱CString password; //密码CString popserver; //pop服务器CString smtpserver; //smtp服务器CString url_address; //服务器URL地址CString verification; //用于添加服务器端附件时的用户信息验证登录界面效果如下:主要函数的实现:i.Void OnEnter()登录需要验证用户的信息,通过Jmail中POP3对象的Connect方法来连接服务器,若能连上,就通过AfxMessageBox("登录成功!")来显示登录成功,然后断开与服务器的连接;失败的话通过‘try-catch’弹出提示信息。
ii.BOOL PreTranslateMessage(MSG* pMsg)PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,在这里用于设置无标题窗体的拖动。
代码如下:CPoint point; //指向窗口鼠标位置的指针GetCursorPos(&point); //得到鼠标位置if(pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd == m_hWnd){PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,poin t.y));}return CDialog::PreTranslateMessage(pMsg);iii.BOOL OnInitDialog()用于在创建显示对话框时的一些初始化工作,这里是设置按钮上的位图,通过SetBitmap实现。