邮件客户端系统的设计与实现毕业设计Word格式.docx
《邮件客户端系统的设计与实现毕业设计Word格式.docx》由会员分享,可在线阅读,更多相关《邮件客户端系统的设计与实现毕业设计Word格式.docx(32页珍藏版)》请在冰豆网上搜索。
由中央计算机和小型计算机控制的面向有限用户的电子系统可以看作是一种计算机会议系统。
最重要的是,电子邮件是整个网间网,以至所有其他网络系统中直接面向人与人之间信息交流的系统,它的数据发送方和接收方都是人,所以极大地满足了大量存在的人与人通信的需求[2]。
在高度信息化的今天,灵活和便捷地使用电子邮件,对提高工作效率、贯彻国家信息化发展战略意义重大。
1.2研究现况
经过在网上的查找,发现有关于电子邮件的管理系统有:
“WindowsLiveMailDesktop”,它将桌面软件的功能性与基于Web的电子邮件的灵活性结合在一起,轻松接收新闻组和RSS源,在脱机状态下撰写、删除及管理电子邮件;
即时添加关于任何信息的WindowsLiveSpaces网络日志项与WindowsLiveMessenger联系人保持密切联系,也可以创建并编辑照片电子邮件[3];
“KooMail”它支持分割发送大邮件并且接收后自动合并,对分割发送的邮件支持断点续传,其中邮件模板支持附件主题等,具有发送邮件加密功能使邮件更安全,实现邮件的过滤和规则功能;
发送邮件无须SMTP服务器,具有多种邮件编码支持各国语言字符集邮件彻底与乱码告别;
可以选择先接收较大或较小的邮件从而优化收邮件列表;
能定时发送邮件[4]。
“梦幻快车(DreamMail)”它支持SMTP、eSMTP、POP3、Hotmail、Yahoo等邮件协议,真正采用多线程高速收发邮件。
附带增强型远程管理,可以直接查看服务器上邮件的内容、直接删除邮件;
具有邮件过滤器、黑名单及白名单等组合使用能有效对付垃圾邮件;
能自动检测破坏性邮件增强系统安全。
另外,梦幻快车通过特有的破乱码技术轻松对付各种乱码邮件。
此外,它还集成了许多特色功能,比如:
添加账号时自动检索POP3/SMTP服务器、可以自定义动态滚动新闻、支持显示发件人地址及插入邮件表情等等[5]。
“Foxmail”它是由原华中理工大学张小龙开发的一款优秀的国产电子邮件客户端软件,2005年3月16日被“腾讯”收购。
新的Foxmail具备强大的反垃圾邮件功能。
它使用多种技术对邮件进行判别,能够准确识别垃圾邮件与非垃圾邮件。
垃圾邮件会被自动分捡到垃圾邮件箱中,有效地降低垃圾邮件对用户干扰,最大限度地减少用户因为处理垃圾邮件而浪费的时间。
数字签名和加密功能在Foxmail5.0中得到支持,可以确保电子邮件的真实性和保密性。
通过安全套接层(SSL)协议收发邮件使得在邮件接收和发送过程中,传输的数据都经过严格的加密,有效防止黑客窃听,保证数据安全。
其他改进包括:
阅读和发送国际邮件(支持Unicode)、地址簿同步、通过安全套接层(SSL)协议收发邮件、收取邮箱邮件;
提高收发Hotmail、MSN电子邮件速度支持名片(vCard)、以嵌入方式显示附件图片、增强本地邮箱邮件搜索功能等等[6]。
1.3系统概述
一般的客户端电子邮件软件应该有以下的功能:
1)编辑邮件(用户进行邮件编辑)
2)读邮件(用户在收件箱、发件箱、草稿箱和垃圾箱中查阅邮件信息)
3)发送邮件(发送已编辑的邮件或回复接收邮件)
4)接收邮件(接收发送方的邮件)
5)添加联系人(向通信录添加联系人信息)
6)编辑联系人(编辑通信录中联系人的信息)
7)删除联系人(删除通信录中联系人信息)
1.4本文工作
本文在深入了解电子邮件管理的实际操作流程的基础上,总结生活中常用的电子邮件功能,采用面向对象的编程思想设计并开发一套简单、方便的客户端电子邮件软件,实现对电子邮件灵活的管理。
2开发环境的搭建
2.1运行平台
2.1.1硬件平台
CPU:
P41.8GHZ。
内存:
256MB以上。
2.1.2软件平台
操作系统:
Windows2003。
C++程序开发工具:
VISUALC++6.0
分辨率:
推荐使用1024×
768像素。
2.2运行环境的配置
2.2.1POP3和STMP简介
(1)POP3概述
POP3是PostOfficeProtocol3的简称,即邮局协议第3版。
它规定了怎样将个人计算机连接到Internet的邮件服务器和如何下载电子邮件。
它是Internet电子邮件的第一个离线协议标准。
简单地说,POP3就是一个简单而使用的邮件信息传输协议。
(2)SMTP概述
SMTP是SimpleMailTransferProtocol的简称,即简单邮件传输协议。
SMTP是一种提供可靠且有效电子邮件传输的协议。
它是一组用于由源地址到目的地址发送邮件的规则,用来控制信件的中转方式。
它帮助每台计算机在发送或中转信件时找到下一个目的地,通过SMTP协议所指定的服务器,将邮件发送到收件人的服务器上。
2.2.2安装POP3/SMTP服务
在Windows2003下架设邮件服务器可以用系统自带的POP3及SMTP服务建立。
同其他服务一样,默认情况下这两个服务是没有安装的,需要手工进行添加。
安装的步骤如下:
第一步:
安装POP3服务组件。
以系统管理员身份登录Windows2003系统,选择【控制面板】|【添加或删除程序】|【添加/删除Windows组件】命令,在弹出的【Windows组件向导】对话框中选中【电子邮件服务】选项。
单击【详细信息】按钮,可以看到该选项包括两部分内容,分别是“POP3服务”和“POP3服务Web管理”。
为方便用户以远程Web方式管理邮件服务器,建议选中【POP3服务Web管理】命令,如图2.1所示。
图2.1选中【POP3服务Web管理】
第二步:
安装SMTP服务组件。
选中【应用程序服务器】选项,单击【详细信息】按钮。
在【Internet信息服务(IIS)】选项中查看详细信息,选中SMTPService选项,单击【确定】按钮。
此外,如果需要对邮件服务器进行远程Web管理,一定要选中【万维网服务】选项中的【远程管理(HTML)】命令组件。
完成以上设置后,单击【下一步】按钮,系统就开始安装配置POP3和SMTP服务了。
2.2.3配置POP3/SMTP服务
配置POP3/SMTP服务器步骤如下:
创建邮件域。
选择【开始】|【管理工具】|【POP3服务】命令,弹出【POP3服务控制台】对话框。
选中左栏中的POP3服务后,单击右栏中的【新域】选项,弹出【添加域】对话框。
在【域名】文本框中输入邮件服务器的域名,也就是邮件地址“@”后面的部分,例如,然后单击【确定】按钮,如图2.2所示。
图2.2
创建新域
创建系统登陆帐户。
选中新建的域,在右栏中选择【添加邮箱】命令,弹出【添加邮箱】对话框,在【邮箱名】文本栏中输入邮件用户名,然后设置用户密码,最后单击【确定】按钮,完成系统登陆帐户的创建,如图2.3所示。
图2.3
创建邮箱
第三步:
配置SMTP服务器。
选择【开始】|【程序】|【管理工具】|【Internet信息服务管理器】选项。
在【IIS管理器】对话框中右击【默认SMTP虚拟服务器】选项,在弹出的菜单中选择【属性】选项,进入【默认SMTP虚拟服务器属性】对话框,切换到【常规】选项卡,在【IP地址】下拉列表框中选择邮件服务器的IP地址即可。
单击【确定】按钮,这样一个简单的邮件服务器就架设完成了,如图2.4所示。
完成以上设置后,就可以使用邮件客户端软件连接邮件服务器进行邮件收发工作。
只要在POP3和SMTP处输入邮件服务器的IP地址即可。
注意:
这个时候smtpaccess里面设置的是匿名访问,此时任何用户都可以利用此mail服务器发邮件。
图2.4
设置SMTP虚拟服务器属性
第四步:
设置在SMTP虚拟服务器中传入邮件信息的存放位置。
SMTP虚拟服务器有一个本地默认域,默认指定的传入邮件信息都放置在C:
\Inetpub\mailroot\Drop文件夹中,可以根据实际情况更改Drop文件夹的位置,如图2.5。
图2.5:
设置传入邮件信息的存放位置
2.2.4Jmail组件的注册
Jmail组件是一个功能强大的邮件发送组件,使用该组件可以方便地实现邮件的发送和接收功能,而且Jmail组件具有通用性,很多语言都可以使用。
但是在使用之前,首先要注册该组件。
注册步骤如下:
从网络上下载的Jmail.dll文件。
把Jmail.dll文件文件复制到C:
\WINDOWS\system32\目录下。
运行注册命令。
在【运行】中输入regsvr32C:
\WINDOWS\system32\Jmail.dll语句,单击确定按钮,当出现如图2.6所示的提示对话框,则完成该组件的注册。
图2.6Jmail.dll注册成功
3系统概要设计
3.1设计目标
(1)系统架构清晰、界面友好美观、操作简便、实用性强;
(2)提供灵活、方便、快捷、准确的电子邮件管理;
3.2功能模块分析
根据系统的用例图和需求分析,可以把系统划分为以下几个功能模块:
(1)登陆模块:
通过电子邮箱帐户和密码进行身份验证,正确输入电子邮箱帐户和密码后,进入系统主界面进行操作。
(2)主界面模块:
整个软件的导航模块,可以单击该界面左侧的按钮进入相应的信箱。
在该界面右侧显示了各个界面的邮件信息,包括邮件总数和新邮件数。
(3)写邮件模块:
用户可以进行邮件编辑、发送,单击“选择收件人”按扭,可以向收件人文本框中插入地址;
通过“添加邮件”和“删除邮件”按扭来设置是否发送附件;
编辑好的邮件,单击工具栏中的“发送”按扭,可以发送邮件。
(4)读邮件模块:
用户在收件箱、发件箱、草稿箱和垃圾箱中按下工具栏中的“查看”按钮后,会打开读邮件模块,用户可以查看当前选择的邮件信息,并且根据需要进行回复或转发操作。
(5)发信箱模块:
保存用户已发送的邮件。
用户可以在发信箱中查看邮件信息,并可以进行再发送。
在工具栏设有查看按钮,删除按钮,清空按钮和排序按钮。
用户可以在工具栏选择“排序”下拉按钮的菜单项选择排序字段。
用户单击“查看”,可以查看当前选择的电子邮件。
(6)草稿箱模块:
主要用来保存用户编辑好但没有发送的邮件。
用户可以在草稿箱中查看邮件信息,并可以进行发送。
(7)垃圾箱模块:
主要用来保存从收件箱中删除的邮件,用户可以在垃圾箱中查看邮件信息,并可以进行发送。
在工具栏设有查看按钮,删除按钮,清空按钮,排序按钮和分类按钮。
用户可以在工具栏选择“排序”下拉按钮的菜单项选择排序字段,也可以通过“分类”按钮根据主题筛选邮件。
(8)收件箱模块:
主要用来管理用户接收到的电子邮件。
在工具栏设有查看按钮,刷新按钮,删除按钮,清空按钮,排序按钮和分类按钮。
用户单击工具栏上的“刷新”按钮,获取新的邮件信息,并写入数据库中。
(9)通信录模块:
用于管理用户的常用联系人。
用户可以设置一些分组,然后将常用联系人添加到分组中,这样在查找联系人时就可以根据分组进行快速查找了。
系统的功能模块图如下:
图3.2系统功能模块图
4系统详细设计
4.1重点模块的详细设计
4.1.1主界面模块的详细设计
本模块的界面是1个基于对话框资源。
在该对话框中添加控件,包括6个图片控件和9个按钮控件,并向工程导入8个位图资源,修改其位图ID。
控件的属性如表1。
表1主界面控件设置表
控件ID
控件属性
关联变量
IDC_STATICRECEIVE
type:
Bitmap、
Image:
IDB_RECEIVE
无
IDC_STATICSEND
IDB__STATICSEND
IDC_STATICDRAFT
IDB__STATICDRAFT
IDC_STATICLITTER
IDB__STATICLITTER
IDC_STATICADDRESS
IDB__STATICADDRESS
IDC_FRAME
Frame、
Color:
Black
CbuttonHotm_Receive
IDC_BUTRECEIVE
勾选Owenrdraw
Cstacticm_Frame
IDC_BUTWRITE
CbuttonHotm_Write
IDC_RECEIVEBOX
CbuttonHotm_Receivebox
IDC_SENDBOX
CbuttonHotm_Sendbox
IDC_DRAFTBOX
CbuttonHotm_Draftbox
IDC_LITTERBOX
CbuttonHotm_Litterbox
IDC_CONTACT
CbuttonHotm_Contact
IDC_BUTMIN
勾选Bitmap
Cbuttonm_Min
IDC_BUTCLOSE
Cbuttonm_Close
本模块的主要任务是当用户登录后,提供不同按钮进入不同的功能模块实现具体的操作,并在信息区域显示当前登陆的邮箱内邮件及新邮件的数量。
主界面通过在头文件声明各个子窗体的指针与其他的模块建立连接,这些指针包括CMailCountDlg*MailCountDlg;
//邮件统计窗体、CReceiveBoxDlg*ReceiveBoxDlg;
//收件箱、CSendBoxDlg*SendBoxDlg;
//发件箱、CDraftBoxDlg*DraftBoxDlg;
//草稿箱、CLitterBoxDlg*LitterBoxDlg;
//垃圾箱、CWriteMailDlg*WriteMailDlg;
//写邮件、CReadMailDlg*ReadMailDlg;
//读邮件、CAddressDlg*AddressDlg;
//通信录、CStatusBarm_StatusBar;
//状态栏。
主界面的下方设置有状态栏,显示当前登陆的邮箱及当前的日期和时间,为用户在编辑邮件时提供一些简要的信息。
主界面的右上方设置了最小化按钮和关闭按钮,用户能通过主界面的这些按钮退出或将程序最小化。
创建状态栏和设置最小化按钮和关闭按钮的显示图片,均在主界面的OnInitDialog方法中完成。
其中,主界面的OnCtlColor函数,处理WM_CTLCOLOR消息,用于绘制背景;
OnButmin函数处理WM_SYSCOMMAND消息,用于处理“最小化”按钮的单击事件。
当用户点击主界面中的功能按钮进入相应的模块时,原来用于显示邮件及新邮件数量等的信息区域,会相应地改变。
用户能通过该区域的变化,直观地判断当前系统所处的模块。
在主界面对话框中,添加CreateDialogBox函数用于创建用户要打开的子窗体,添加DestroyWindowBox函数用于销毁当前打开的子窗口,此外在主界面的PreTranslateMessage虚方法中,屏蔽<
ESC>
键关闭窗体的功能,并设置无标题窗体的拖动,从而实现信息区域的变化。
本系统的按钮具有热点效果,实现步骤如下:
(1)以CButton类为基类,派生一个CbuttonHot类
(2)重载DrawItem方法,在该方法中绘制按钮控件
代码如下:
CDCdc;
//通过创建一个CDC类的对象,声明设备上下文
dc.Attach(lpDrawItemStruct->
hDC);
//获得绘制按钮设备上下文
UINTstate=lpDrawItemStruct->
itemState;
//获取状态
CRectrect;
//声明区域对象
GetClientRect(rect);
//获得编辑框客户区域
CStringtext;
GetWindowText(text);
//获得按钮文本
if(state&
ODS_DISABLED)//如果按钮不可用
{
dc.SetBkMode(TRANSPARENT);
//设置背景透明
dc.SetTextColor(RGB(0,0,0));
//设置文本颜色
dc.DrawText(text,&
rect,DT_CENTER);
//绘制文本
}
elseif(m_IsInRect==TRUE)//如果鼠标在按钮上
//设置背景颜色
dc.SetTextColor(RGB(255,0,0));
else//默认情况下
(3)重载PreSubclassWindow方法,在该方法中设置定时器
SetTimer(1,10,NULL);
//设置定时器
CButton:
:
PreSubclassWindow();
(4)在CbuttonHot类的OnTimer方法中,设置在定时器中判断鼠标是否移动到按钮上
CPointpoint;
//声明Cpoint变量
GetCursorPos(&
point);
//获得鼠标位置
CRectrcWnd;
//声明区域对象
GetWindowRect(&
rcWnd);
//获得按钮区域
if(rcWnd.PtInRect(point))//判断鼠标是否在按钮上
if(m_IsInRect==TRUE)//判断鼠标是否一直在按钮上
gotoEND;
//跳转到标记
else//鼠标移动到按钮上
{
m_IsInRect=TRUE;
//设置m_IsInRect变量值
Invalidate();
//重绘按钮
}
else//不在按钮区域内
if(m_IsInRect==FALSE)//判断鼠标一直在按钮外
else//鼠标移动到按钮外
m_IsInRect=FALSE;
END:
CButton:
OnTimer(nIDEvent);
//设置标记,调用基类方法
4.2.2写邮件模块的详细设计
本模块的界面是1个基于对话框资源。
在该对话框中添加控件,包括4个文本框控件、1个列表控件和3个按钮控件。
控件的属性设置如表2。
表2写邮件界面控件设置表
IDC_EDIT1
勾选Read-only
Cstingm_SendMan
IDC_EDIT2
Cstingm_ReceiveMan
IDC_EDIT3
Cstingm_Motif
IDC_EDIT4
Multiline、Verticalscoll、
AutoVscroll、Wantreturn
Cstingm_Text
IDC_LIST1
勾选Verticalscroll
ClistBoxm_Annex
IDC_BUTSELECT
CbuttonHotm_Select
IDC_BUTADD
CbuttonHotm_Add
IDC_BUTDEL
CbuttonHotm_Del
本模块的任务是让用户点击“写信”功能按钮后进入写邮件模块,用户可以在该模块内编辑邮件,并根据工具栏的按钮进行发送、存草稿、取消等操作。
在邮件编辑时,写邮件模块所提供的“选择收