版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要随着改革开放的深入发展,社会主义市场经济的建立,信息化时代的步伐不断加快。根据最新公布的2006-2020国家信息化发展战略,信息化是充分利用信息技术,开发利用信息资源,促进信息交流和知识共享,提高经济增长质量,推动经济社会发展转型的历史进程。电子邮件是整个网间网,以至所有其他网络系统中直接面向人与人之间信息交流的系统,它的数据发送方和接收方都是人,所以极大地满足了大量存在的人与人通信的需求。本文在深入了解电子邮件管理的实际操作流程的基础上,总结生活中常用的电子邮件功能,采用面向对象的编程思想结合当前流行的Jmail技术设计并开发一套简单、方便的客户端电子邮件软件,实现对电子邮件灵活的管
2、理。关键词:电子邮件 客户端 Jmail组件目 录1 绪论11.1 研究背景11.2 研究现况11.3 系统概述21.4 本文工作32 开发环境的搭建32.1 运行平台32.1.1 硬件平台32.1.2 软件平台32.2 运行环境的配置32.2.1 POP3和STMP简介32.2.2 安装POP3/SMTP服务32.2.3 配置POP3/SMTP服务42.2.4 Jmail组件的注册63 系统概要设计73.1 设计目标73.2 功能模块分析74 系统详细设计94.1 重点模块的详细设计94.1.1 主界面模块的详细设计94.2.2 写邮件模块的详细设计124.2.3 草稿箱模块的详细设计144
3、.2.4 收件箱模块的详细设计154.2.5 读邮件模块的详细设计164.2.6 通信录模块的详细设计174.2.7 使用MAPI函数实现发送功能的详细设计184.2.8 使用Jmail组件实现接收功能的详细设计235 测试分析256 总结30参 考 文 献31Abstract32致 谢33仲恺农业工程学院毕业论文(设计)成绩评定表34II1 绪论1.1 研究背景随着改革开放的深入发展,社会主义市场经济的建立,信息化时代的步伐不断加快。根据最新公布的2006-2020国家信息化发展战略,信息化是充分利用信息技术,开发利用信息资源,促进信息交流和知识共享,提高经济增长质量,推动经济社会发展转型的
4、历史进程 1。电子邮件是当前信息化时代中不可缺少的重要通信手段。电子邮件是种用电子手段提供信息交换的通信方式,是Internet应用最广的服务:通过网络的电子邮件系统,用户可以用非常低廉的价格(不管发送到哪里,都只需负担电话费和网费即可),以非常快速的方式(几秒钟之内可以发送到世界上任何你指定的目的地),与世界上任何一个角落的网络用户联系,这些电子邮件可以是文字、图像、声音等各种方式。同时,用户可以得到大量免费的新闻、专题邮件,并实现轻松的信息搜索。这是任何传统的方式也无法相比的。正是由于电子邮件的使用简易、投递迅速、收费低廉,易于保存、全球畅通无阻,使得电子邮件被广泛地应用,它使人们的交流方
5、式得到了极大的改变。电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能象信件一样使收信者在接收端收到文字记录。电子邮件系统又称基于计算机的邮件报文系统。它承担从邮件进入系统到邮件到达目的地为止的全部处理过程。电子邮件不仅可利用电话网络,而且可利用任何通信网传送。在利用电话网络时,还可利用其非高峰期间传送信息,这对于商业邮件具有特殊价值。由中央计算机和小型计算机控制的面向有限用户的电子系统可以看作是一种计算机会议系统。最重要的是,电子邮件是整个网间网,以至所有其他网络系统中直接面向人与人之间信息交流的系统,它的数据发送方和接收方都是人,所以极大地满足了大量存在的人与人通信
6、的需求2。在高度信息化的今天,灵活和便捷地使用电子邮件,对提高工作效率、贯彻国家信息化发展战略意义重大。1.2 研究现况经过在网上的查找,发现有关于电子邮件的管理系统有:“Windows Live Mail Desktop”,它将桌面软件的功能性与基于 Web 的电子邮件的灵活性结合在一起,轻松接收新闻组和 RSS 源,在脱机状态下撰写、删除及管理电子邮件;即时添加关于任何信息的 Windows Live Spaces 网络日志项 与 Windows Live Messenger 联系人保持密切联系,也可以创建并编辑照片电子邮件3;“KooMail” 它支持分割发送大邮件并且接收后自动合并,对
7、分割发送的邮件支持断点续传,其中邮件模板支持附件主题等,具有发送邮件加密功能使邮件更安全,实现邮件的过滤和规则功能;发送邮件无须SMTP服务器,具有多种邮件编码支持各国语言字符集邮件彻底与乱码告别;可以选择先接收较大或较小的邮件从而优化收邮件列表;能定时发送邮件4。“梦幻快车(DreamMail)”它支持 SMTP、eSMTP、POP 3、Hotmail、Yahoo 等邮件协议,真正采用多线程高速收发邮件。附带增强型远程管理,可以直接查看服务器上邮件的内容、直接删除邮件;具有邮件过滤器、黑名单及白名单等组合使用能有效对付垃圾邮件;能自动检测破坏性邮件增强系统安全。另外,梦幻快车通过特有的破乱码
8、技术轻松对付各种乱码邮件。此外,它还集成了许多特色功能,比如:添加账号时自动检索 POP3/SMTP服务器、可以自定义动态滚动新闻、支持显示发件人地址及插入邮件表情等等5。“Foxmail”它是由原华中理工大学张小龙开发的一款优秀的国产电子邮件客户端软件,2005年3月16日被“腾讯”收购。新的Foxmail具备强大的反垃圾邮件功能。它使用多种技术对邮件进行判别,能够准确识别垃圾邮件与非垃圾邮件。垃圾邮件会被自动分捡到垃圾邮件箱中,有效地降低垃圾邮件对用户干扰,最大限度地减少用户因为处理垃圾邮件而浪费的时间。数字签名和加密功能在Foxmail 5.0中得到支持,可以确保电子邮件的真实性和保密性
9、。 通过安全套接层(SSL)协议收发邮件使得在邮件接收和发送过程中,传输的数据都经过严格的加密,有效防止黑客窃听,保证数据安全。其他改进包括:阅读和发送国际邮件(支持Unicode)、地址簿同步、通过安全套接层(SSL)协议收发邮件、收取邮箱邮件;提高收发Hotmail、MSN电子邮件速度 支持名片(vCard)、以嵌入方式显示附件图片、增强本地邮箱邮件搜索功能等等6。1.3 系统概述一般的客户端电子邮件软件应该有以下的功能:1) 编辑邮件(用户进行邮件编辑)。书写新邮件2) 读邮件(用户在收件箱、发件箱、草稿箱和垃圾箱中查阅邮件信息)3) 发送邮件(发送已编辑的邮件或回复接收邮件)。发送邮件
10、4) 接收邮件(接收发送方的邮件)。收取邮件5) 添加联系人(向通信录添加联系人信息)6) 编辑联系人(编辑通信录中联系人的信息)7)删除联系人(删除通信录中联系人信息)1.4 本文工作本文在深入了解电子邮件管理的实际操作流程的基础上,总结生活中常用的电子邮件功能,采用面向对象的编程思想设计并开发一套简单、方便的客户端电子邮件软件,实现对电子邮件灵活的管理。2 开发环境的搭建2.1 运行平台2.1.1 硬件平台CPU:P4 1.8GHZ。内存:256MB以上。2.1.2 软件平台操作系统:Windows 2003。C+程序开发工具:VISUAL C+ 6.0分辨率:推荐使用1024×
11、768像素。2.2 运行环境的配置2.2.1 POP3和STMP简介(1)POP3概述POP3是Post Office Protocol 3的简称,即邮局协议第3版。它规定了怎样将个人计算机连接到Internet的邮件服务器和如何下载电子邮件。它是Internet电子邮件的第一个离线协议标准。简单地说,POP3就是一个简单而实用的邮件信息传输协议。(2)SMTP概述SMTP是Simple Mail Transfer Protocol的简称,即简单邮件传输协议。SMTP是一种提供可靠且有效电子邮件传输的协议。它是一组用于由源地址到目的地址发送邮件的规则,用来控制信件的中转方式。它帮助每台计算机在
12、发送或中转信件时找到下一个目的地,通过SMTP协议所指定的服务器,将邮件发送到收件人的服务器上。2.2.2 安装POP3/SMTP服务在Windows 2003下架设邮件服务器可以用系统自带的POP3及SMTP服务建立。同其他服务一样,默认情况下这两个服务是没有安装的,需要手工进行添加。安装的步骤如下:第一步:安装POP3服务组件。以系统管理员身份登录Windows 2003系统,选择【控制面板】|【添加或删除程序】|【添加/删除Windows组件】命令,在弹出的【Windows组件向导】对话框中选中【电子邮件服务】选项。单击【详细信息】按钮,可以看到该选项包括两部分内容,分别是“POP3服务
13、”和“POP3服务Web管理”。为方便用户以远程Web方式管理邮件服务器,建议选中【POP3服务Web管理】命令,如图2.1所示。 图2.1 选中【POP3服务Web管理】第二步:安装SMTP服务组件。选中【应用程序服务器】选项,单击【详细信息】按钮。在【Internet信息服务(IIS)】选项中查看详细信息,选中SMTP Service选项,单击【确定】按钮。此外,如果需要对邮件服务器进行远程Web管理,一定要选中【万维网服务】选项中的【远程管理(HTML)】命令组件。完成以上设置后,单击【下一步】按钮,系统就开始安装配置POP3和SMTP服务了。2.2.3 配置POP3/SMTP服务配置P
14、OP3/SMTP服务器步骤如下:第一步:创建邮件域。选择【开始】|【管理工具】|【POP3服务】命令,弹出【POP3服务控制台】对话框。选中左栏中的POP3服务后,单击右栏中的【新域】选项,弹出【添加域】对话框。在【域名】文本框中输入邮件服务器的域名,也就是邮件地址“”后面的部分,例如,然后单击【确定】按钮,如图2.2所示。图2.2 创建新域第二步:创建系统登陆帐户。选中新建的域,在右栏中选择【添加邮箱】命令,弹出【添加邮箱】对话框,在【邮箱名】文本栏中输入邮件用户名,然后设置用户密码,最后单击【确定】按钮,完成系统登陆帐户的创建,如图2.3所示。图2.3 &
15、#160; 创建邮箱第三步:配置SMTP服务器。选择【开始】|【程序】|【管理工具】|【Internet信息服务管理器】选项。在【IIS管理器】对话框中右击【默认SMTP虚拟服务器】选项,在弹出的菜单中选择【属性】选项,进入【默认SMTP虚拟服务器属性】对话框,切换到【常规】选项卡,在【IP地址】下拉列表框中选择邮件服务器的IP地址即可。单击【确定】按钮,这样一个简单的邮件服务器就架设完成了,如图2.4所示。完成以上设置后,就可以使用邮件客户端软件连接邮件服务器进行邮件收发工作。只要在POP3和SMTP处输入邮件服务器的IP地址即可。注意:这个时候smtp access里面设置的是匿名访问,此
16、时任何用户都可以利用此mail服务器发邮件。图2.4 设置SMTP虚拟服务器属性第四步:设置在SMTP虚拟服务器中传入邮件信息的存放位置。SMTP虚拟服务器有一个本地默认域,默认指定的传入邮件信息都放置在C:InetpubmailrootDrop文件夹中,可以根据实际情况更改Drop文件夹的位置,如图2.5。图2.5:设置传入邮件信息的存放位置2.2.4 Jmail组件的注册Jmail组件是一个功能强大的邮件发送组件,使用该组件可以方便地实现邮件的发送和接收功能,而且Jmail组件具有通用性,很多语言都可以使用。但是在使用之前,首先要注册该组件。注册步骤如下:第一步:从
17、网络上下载的Jmail.dll文件。第二步:把Jmail.dll文件复制到 C:WINDOWSsystem32目录下。第三步:运行注册命令。在【运行】中输入regsvr32 C:WINDOWSsystem32Jmail.dll语句,单击确定按钮,当出现如图2.6所示的提示对话框,则完成该组件的注册。图2.6 Jmail.dll注册成功3 系统概要设计3.1 设计目标(1)系统架构清晰、界面友好美观、操作简便、实用性强;(2)提供灵活、方便、快捷、准确的电子邮件管理;3.2 功能模块分析根据系统的用例图和需求分析,可以把系统划分为以下几个功能模块:(1) 登陆模块:通过电子邮箱帐户和密码进行身份
18、验证,正确输入电子邮箱帐户和密码后,进入系统主界面进行操作。(2) 主界面模块:整个软件的导航模块,可以单击该界面左侧的按钮进入相应的信箱。在该界面右侧显示了各个界面的邮件信息,包括邮件总数和新邮件数。(3) 写邮件模块:用户可以进行邮件编辑、发送,单击“选择收件人”按扭,可以向收件人文本框中插入地址;通过“添加邮件”和“删除邮件”按扭来设置是否发送附件;编辑好的邮件,单击工具栏中的“发送”按扭,可以发送邮件。(4) 读邮件模块:用户在收件箱、发件箱、草稿箱和垃圾箱中按下工具栏中的“查看”按钮后,会打开读邮件模块,用户可以查看当前选择的邮件信息,并且根据需要进行回复或转发操作。(5) 发信箱模
19、块:保存用户已发送的邮件。用户可以在发信箱中查看邮件信息,并可以进行再发送。在工具栏设有查看按钮,删除按钮,清空按钮和排序按钮。用户可以在工具栏选择“排序”下拉按钮的菜单项选择排序字段。用户单击“查看”,可以查看当前选择的电子邮件。(6) 草稿箱模块:主要用来保存用户编辑好但没有发送的邮件。用户可以在草稿箱中查看邮件信息,并可以进行发送。在工具栏设有查看按钮,删除按钮,清空按钮和排序按钮。用户可以在工具栏选择“排序”下拉按钮的菜单项选择排序字段。用户单击“查看”,可以查看当前选择的电子邮件。(7) 垃圾箱模块:主要用来保存从收件箱中删除的邮件,用户可以在垃圾箱中查看邮件信息,并可以进行发送。在
20、工具栏设有查看按钮,删除按钮,清空按钮,排序按钮和分类按钮。用户可以在工具栏选择“排序”下拉按钮的菜单项选择排序字段,也可以通过“分类”按钮根据主题筛选邮件。用户单击“查看”,可以查看当前选择的电子邮件。(8) 收件箱模块:主要用来管理用户接收到的电子邮件。在工具栏设有查看按钮,刷新按钮,删除按钮,清空按钮,排序按钮和分类按钮。用户可以在工具栏选择“排序”下拉按钮的菜单项选择排序字段,也可以通过“分类”按钮根据主题筛选邮件。用户单击工具栏上的“刷新”按钮,获取新的邮件信息,并写入数据库中。用户单击“查看”,可以查看当前选择的电子邮件。(9) 通信录模块:用于管理用户的常用联系人。用户可以设置一
21、些分组,然后将常用联系人添加到分组中,这样在查找联系人时就可以根据分组进行快速查找了。系统的功能模块图如下:发送邮件客户端电子邮件软件垃圾箱草稿箱写邮件发件箱存入草稿箱选择联系人添加附件删除附件查看邮件删除邮件清空发件箱邮件箱排序查看邮件删除邮件清空草稿箱邮件箱排序查看邮件删除邮件清空垃圾箱邮件箱排序邮件分类收件箱查看邮件接收新邮件删除邮件情况收件箱邮件排序邮件分类读邮件回复邮件转发邮件保存联系人另存为附件通信录添加邮件添加联系人编辑联系人删除联系人分组查看图3.2 系统功能模块图4 系统详细设计4.1 重点模块的详细设计4.1.1 主界面模块的详细设计本模块的界面是 1个基于对话框资源。在该
22、对话框中添加控件,包括6个图片控件和9个按钮控件,并向工程导入8个位图资源,修改其位图ID。控件的属性如表1。表1 主界面控件设置表控件ID控件属性关联变量IDC_STATICRECEIVEtype: Bitmap、Image: IDB_RECEIVE无IDC_STATICSENDtype: Bitmap、Image:IDB_STATICSEND无IDC_STATICDRAFTtype: Bitmap、Image:IDB_STATICDRAFT无IDC_STATICLITTERtype: Bitmap、Image:IDB_STATICLITTER无IDC_STATICADDRESStype:
23、Bitmap、Image:IDB_STATICADDRESS无IDC_FRAMEtype: Frame、Color: BlackCbuttonHot m_ReceiveIDC_BUTRECEIVE勾选Owenr drawCstactic m_FrameIDC_BUTWRITE勾选Owenr drawCbuttonHot m_ WriteIDC_RECEIVEBOX勾选Owenr drawCbuttonHot m_ ReceiveboxIDC_ SENDBOX勾选Owenr drawCbuttonHot m_SendboxIDC_ DRAFTBOX勾选Owenr drawCbuttonHot m
24、_ DraftboxIDC_ LITTERBOX勾选Owenr drawCbuttonHot m_ LitterboxIDC_ CONTACT勾选Owenr drawCbuttonHot m_ ContactIDC_ BUTMIN勾选BitmapCbutton m_ MinIDC_ BUTCLOSE勾选BitmapCbutton m_Close本模块的主要任务是当用户登录后,提供不同按钮进入不同的功能模块实现具体的操作,并在信息区域显示当前登陆的邮箱内邮件及新邮件的数量。主界面通过在头文件声明各个子窗体的指针与其他的模块建立连接,这些指针包括CMailCountDlg * MailCountD
25、lg;/邮件统计窗体、CReceiveBoxDlg*ReceiveBoxDlg;/收件箱、CSendBoxDlg * SendBoxDlg;/发件箱、CDraftBoxDlg * DraftBoxDlg;/草稿箱、CLitterBoxDlg * LitterBoxDlg;/垃圾箱、CWriteMailDlg * WriteMailDlg;/写邮件、CReadMailDlg * ReadMailDlg;/读邮件、CAddressDlg * AddressDlg;/通信录、CStatusBar m_StatusBar;/状态栏。主界面的下方设置有状态栏,显示当前登陆的邮箱及当前的日期和时间,为用户
26、在编辑邮件时提供一些简要的信息。主界面的右上方设置了最小化按钮和关闭按钮,用户能通过主界面的这些按钮退出或将程序最小化。创建状态栏和设置最小化按钮和关闭按钮的显示图片,均在主界面的OnInitDialog方法中完成。其中,主界面的OnCtlColor函数,处理WM_CTLCOLOR消息,用于绘制背景;OnButmin函数处理WM_SYSCOMMAND消息,用于处理“最小化”按钮的单击事件。当用户点击主界面中的功能按钮进入相应的模块时,原来用于显示邮件及新邮件数量等的信息区域,会相应地改变。用户能通过该区域的变化,直观地判断当前系统所处的模块。在主界面对话框中,添加CreateDialogBox
27、函数用于创建用户要打开的子窗体,添加DestroyWindowBox函数用于销毁当前打开的子窗口,此外在主界面的PreTranslateMessage虚方法中,屏蔽<ESC>键关闭窗体的功能,并设置无标题窗体的拖动,从而实现信息区域的变化。本系统的按钮具有热点效果,实现步骤如下:(1)以CButton类为基类,派生一个CbuttonHot类(2)重载DrawItem方法,在该方法中绘制按钮控件代码如下:CDC dc; /通过创建一个CDC类的对象,声明设备上下文dc.Attach(lpDrawItemStruct->hDC);/获得绘制按钮设备上下文UINT state =
28、lpDrawItemStruct->itemState;/获取状态CRect rect;/声明区域对象GetClientRect(rect);/获得编辑框客户区域CString text;GetWindowText(text);/获得按钮文本if(state & ODS_DISABLED)/如果按钮不可用dc.SetBkMode(TRANSPARENT);/设置背景透明dc.SetTextColor(RGB(0,0,0);/设置文本颜色dc.DrawText(text,&rect,DT_CENTER);/绘制文本else if(m_IsInRect=TRUE) /如果鼠标
29、在按钮上dc.SetBkMode(TRANSPARENT);/设置背景颜色dc.SetTextColor(RGB(255,0,0);/设置文本颜色dc.DrawText(text,&rect,DT_CENTER);/绘制文本else/默认情况下dc.SetBkMode(TRANSPARENT);/设置背景透明dc.SetTextColor(RGB(0,0,0);/设置文本颜色dc.DrawText(text,&rect,DT_CENTER);/绘制文本(3)重载PreSubclassWindow方法,在该方法中设置定时器代码如下:SetTimer(1,10,NULL); /设置
30、定时器CButton:PreSubclassWindow();(4)在CbuttonHot类的OnTimer方法中,设置在定时器中判断鼠标是否移动到按钮上代码如下:CPoint point;/声明Cpoint变量GetCursorPos(&point);/获得鼠标位置CRect rcWnd;/声明区域对象GetWindowRect(&rcWnd);/获得按钮区域if(rcWnd.PtInRect(point)/判断鼠标是否在按钮上if(m_IsInRect = TRUE)/判断鼠标是否一直在按钮上goto END;/跳转到标记else/鼠标移动到按钮上m_IsInRect =
31、TRUE;/设置m_IsInRect变量值Invalidate();/重绘按钮else/不在按钮区域内if(m_IsInRect = FALSE)/判断鼠标一直在按钮外goto END;/跳转到标记else/鼠标移动到按钮外Invalidate();/重绘按钮m_IsInRect = FALSE;/设置m_IsInRect变量值END:CButton:OnTimer(nIDEvent);/设置标记,调用基类方法4.2.2 写邮件模块的详细设计本模块的界面是1个基于对话框资源。在该对话框中添加控件,包括4个文本框控件、1个列表控件和3个按钮控件。控件的属性设置如表2。表2 写邮件界面控件设置表控
32、件ID控件属性关联变量IDC_EDIT1勾选Read-onlyCsting m_SendManIDC_ EDIT2无Csting m_ReceiveManIDC_ EDIT3无Csting m_MotifIDC_ EDIT4Multiline、Vertical scoll、Auto Vscroll、Want returnCsting m_TextIDC_LIST1勾选Vertical scrollClistBox m_AnnexIDC_BUTSELECT勾选Owenr drawCbuttonHot m_SelectIDC_BUTADD勾选Owenr drawCbuttonHot m_AddID
33、C_ BUTDEL勾选Owenr drawCbuttonHot m_Del本模块的任务是让用户点击“写信”功能按钮后进入写邮件模块,用户可以在该模块内编辑邮件,并根据工具栏的按钮进行发送、存草稿、取消等操作。在邮件编辑时,写邮件模块所提供的“选择收件人”按键,由对话框的OnButselect方法处理该按键的单击事件,当按钮按下后弹出“联系人列表”对话框,在“联系人列表”对话框中可以通过条件查询,将查询结构插入到写邮件模块的“收件人”文本框中。对话框的OnButadd方法处理“添加附件”按钮的单击事件,当按钮按下后弹出“附件列表”对话框,用户在“附件列表”对话框中选择附件的路径。对话框的OnBu
34、tdel方法处理“删除附件”按钮的单击事件,用户附件文本框中,选择需要删除的附件,单击"删除附件"按钮即可删除选中的附件。写邮件模块中所设置的工具栏提供“发送”、“存草稿”和“取消”按钮。用户在编辑邮件后,选择所需的工具栏按钮执行相应的操作。工具栏在对话框的OnInitDialog方法中创建。写邮件对话框的OnSend方法处理工具栏“发送”按钮的单击事件,该事件调用线程函数发送邮件,并将发送的邮件信息写入到发件箱,前提在主界面的.CPP文件中声明MAPI函数原型,并定义线程函数ThreadProc,在该线程函数中执行MAPI函数的代码,实现发送邮件的功能,执行该线程函数后会
35、返回一个执行成功或执行失败的值,用来判读邮件是否发送成功。写邮件对话框的OnSave方法处理工具栏中“存草稿”按钮的单击事件,当按钮按下后将当前编辑的邮件信息保存到草稿箱中。对话框的OnCan方法处理工具栏中“取消”按钮的单击事件,当按钮按下后清空当前编辑的邮件信息。线程函数ThreadProc的说明如下:线程函数ThreadProc,是一个应用程序定义的函数,可作为起始地址的线程。指定这个地址时,调用CreateThread或CreateRemoteThread功能。ThreadProc是一个占位符的应用定义的函数名称。线程函数ThreadProc的函数原型如下:DWORD WINAPI T
36、hreadProc( LPVOID lpParameter /线程数据);其中参数lpParameter用于接收CreateThread或CreateRemoteThread功能传递给函数的线程数据。执行线程函数ThreadProc后,将返回一个布尔型的值表明函数执行是否成功。系统依靠该返回值,判断提示消息“发送成功”或“操作失败”。4.2.3 草稿箱模块的详细设计本模块界面的是1个基于对话框资源。在该对话框中添加控件,包括1个文本框控件、1个列表视图控件、32个复选框控件和5个按钮控件。控件的属性设置如表3。表3 草稿箱界面控件设置表控件ID控件属性关联变量IDC_EDIT1无int m_P
37、ageIDC_LIST1View: Report勾选No sort headerClistCtrl m_GridIDC_CURRENTLY勾选Owenr draw、DisabledCbuttonHot m_CurrentlyIDC_BUTPEVIOUS勾选Owenr drawCbuttonHot m_PreviousIDC_ BUTNEXT勾选Owenr drawCbuttonHot m_NextIDC_ SUM勾选Owenr draw、DisabledCbuttonHot m_SumIDC_ BUTGO勾选Owenr drawCbuttonHot m_Go本模块的任务是管理用户在写邮件模块中
38、单击“存草稿”按钮后所保存的邮件。本模块需要在头文件中声明以下的变量,包括:CToolBar m_ToolBar;/工具栏对象、CReBar m_Rebar;/Rebar条,这两个变量用于创建带背景的工具栏。还有CCustomMenu m_MenuOrder;/排序菜单、CString m_Sql;/记录查询语句、int m_Num;/记录分页码、Cstring m_SortField;/记录排序字段,这三个变量用于排序下拉按钮。本模块在工具栏中提供了“查看”按钮、“删除”按钮、“清空”按钮和“排序”按钮。用户在邮件的列表视图中选择所需的邮件,通过工具栏选择功能按钮执行相应的操作。工具栏在对话
39、框的OnInitDialog方法中创建,并设置工具栏下拉按钮,设置列表视图控件的扩展风,向列表中插入数据,和计算分页的页码。工具栏中“查看”按钮的单击事件由对话框的中OnLook方法处理,单击“查看”按钮,弹出写邮件模块,在写邮件模块中显示当前邮件的具体信息。工具栏中“删除”按钮的单击事件由对话框的OnDelete方法处理,当用户在邮件列表图中选定需要删除的邮件,单击“删除”按钮即可。工具栏中“清除”按钮的单击事件由对话框的OnClear方法处理,单击“清除”按钮将删除草稿箱内所有的邮件。工具栏中的“排序”按钮是下拉式按钮,下拉后分别有“按邮箱”、“按主题”和“按时间” 的选项。“按邮箱”排序
40、的单击事件由对话框的中OnMenureceive方法处理,该事件中根据收件人信息来排列邮件。“按主题”排序的单击事件由对话框的中OnMenumotif方法处理,该事件中根据邮件的主题信息来排列邮件。“按时间”排序的单击事件由对话框的中OnMenutime方法处理,该事件中根据邮件的修改时间信息来排列邮件。此外对话框还要添加AddToGrid函数,将符合条件的邮件记录都插入到列表中。邮件的列表视图设有“上一页”、“下一页”和“GO”按钮,用户能通过这些按钮查看列表中的所有邮件。“GO”按钮的单击事件由对话框的中OnButgo方法处理,当用户在文本框中输入要跳转的页码后,单击GO按钮,邮件列表视图
41、跳到文本框中输入页。“上一页” 按钮的单击事件由对话框的中OnButprevious方法处理,如果当前邮件列表图为非第一页,单击“上一页” 按钮,邮件列表视图将转到当前页的前一页。“下一页”按钮的单击事件由对话框的中OnButnext方法处理,如果当前邮件列表图为非最后以页,单击“下一页” 按钮,邮件列表视图将转到当前页的后一页。4.2.4 收件箱模块的详细设计本模块的是1个基于对话框资源。在该对话框中添加控件,包括1个文本框控件、1个列表视图控件、31个复选框控件和5个按钮控件。控件的属性设置如表4。表4 收件箱界面控件设置表控件ID控件属性关联变量IDC_EDIT1无int m_PageI
42、DC_LIST1无View: Report勾选No sort headerClistCtrl m_GridIDC_CURRENTLY勾选Owenr draw、DisabledCbuttonHot m_CurrentlyIDC_BUTPEVIOUS勾选Owenr drawCbuttonHot m_PreviousIDC_ BUTNEXT勾选Owenr drawCbuttonHot m_NextIDC_ SUM勾选Owenr draw、DisabledCbuttonHot m_SumIDC_ BUTGO勾选Owenr drawCbuttonHot m_Go本模块的任务管理用户接收到的电子邮件。本模
43、块在工具栏中提供了“查看”按钮、“删除”按钮、“清空”按钮、“排序”按钮和“分类” 按钮,和草稿箱模块的工具栏相比增加了“分类”按钮和“刷新”按钮。用户在登陆邮件箱前,系统提供了“添加分类”按钮。默认的情况下,系统提供了文件和邮件两个分类,用户也可以根据自己的需要增加分类标识。分类主要是对接收到的邮件进行分类管理。要想对邮件进行分类,必须让发送者了解您的分类格式,当对方给您发送邮件时,在主题后面加上“TO:”+分类名称即可,例如:“TO:文件”,则接收邮件后程序自动将该封邮件分到“文件”类中,当选择“分类”菜单中的“文件”时,自动会显示在邮件列表视图中。本模块的工具栏在对话框的OnInitDi
44、alog方法中创建,并设置工具栏下拉按钮,设置列表视图控件的扩展风,向列表中插入数据,和计算分页的页码。工具栏中“刷新”按钮的单击事件由对话框的OnRefurbish方法处理,当用户按下“刷新”按钮后,将读取新邮件信息,并将新邮件标记为未读邮件。此外添加AddToGrid函数,将数据库中已收到的邮件信息添加到收件箱列表中,并判断是否为未读邮件,如果是未读邮件,则在发件人后追加“(未读)”标记。IsReceiveMail函数,用于判断是否为新邮件。IsReceiveMail函数的代码如下:BOOL CReceiveBoxDlg:IsReceiveMail(CString sql)BOOL res
45、ult;ADO m_Ado;m_Ado.OnInitADOConn(); /连接数据库m_Ado.m_pRecordset = m_Ado.OpenRecordset(sql);/打开记录集if(!m_Ado.m_pRecordset->adoEOF) /如果是新邮件 result = FALSE; /设置返回值FALSEelse /邮件不存在 result = TRUE; /设置返回值TRUEm_Ado.CloseRecordset(); /关闭记录集m_Ado.CloseConn(); /断开数据库连接return result;4.2.5 读邮件模块的详细设计本模块的界面是1个基于
46、对话框资源。在该对话框中添加控件,包括5个文本框控件、1个列表视图控件、2个按钮控件。控件的属性设置如表5。表5 读邮件界面控件设置表控件ID控件属性关联变量IDC_EDIT1无Csting m_SendManIDC_ EDIT2无Csting m_Motif IDC_ EDIT3勾选Read-onlyCsting m_ReceiveManIDC_ EDIT4勾选Read-onlyCsting m_RtimeIDC_ EDIT5Multiline、Vertical scoll、Auto Vscroll、Want returnCsting m_TextIDC_LIST1勾选Vertical sc
47、rollClistBox m_AnnexIDC_LINKMAN勾选Owenr drawCbuttonHot m_LinkmanIDC_BUTSAVE勾选Owenr drawCbuttonHot m_Save本模块的任务是查看用户在收收件箱和垃圾箱选定并单击“查看”按钮的邮件信息并且根据需要进行回复或转发操作。本模块在工具栏中提供了“回复”按钮、“转发”按钮。本模块的工具栏在对话框的OnInitDialog方法中创建。工具栏中“回复”按钮的单击事件由对话框的中OnRestore方法处理,当用户选择回复邮件时,将打开写邮件模块,并将当前邮件的发件人写入到收件人文本框中。工具栏中“转发”按钮的单击事
48、件由对话框的中OnTransmit方法处理,当用户选择转发邮件时,将打开写邮件模块,并将当前邮件的信息写入到相应的位置。在本模块中,阅读邮件信息时提供了“保存联系人”按钮和“另存为附件”按钮。其中“保存联系人”按钮的单击事件由对话框的中OnLinkman方法处理,当用户单击该按钮,系统会保存发件人的信息到通信录模块。工具栏中“附件另存为”按钮的单击事件由对话框的中OnButsave方法处理,当用户按下此按钮后,弹出“另存为”对话框,在用户选择存储附件的路径后保存附件。4.2.6 通信录模块的详细设计本模块的任务是管理用户的常用联系人,该模块工具栏中的“添加”按钮通过通信录的两个子窗体“添加分组
49、”窗体和“添加联系人”窗体的组合实现的添加联系人的功能。添加联系人窗体界面是1个基于对话框资源。在该对话框中添加控件,包括4个文本框控件、1个组合框控件和4个按钮控件。控件的属性设置如表6。表6 通讯录界面控件设置表控件ID控件属性关联变量IDC_EDIT1无Csting m_ManIDC_ EDIT2无Csting m_Mail IDC_ EDIT3无Csting m_PhoneIDC_ EDIT4无Csting m_AddressIDC_ COMBO1无CbuttonBox m_ComboIDC_LINKMAN勾选Owenr draw、DissabledCbuttonHot m_Linkm
50、anIDC_ BUTGROUP勾选Owenr drawClistBox m_Group添加联系人窗体必须在头文件中声明所需变量,分别是m_Name:窗体标题和m_IsAdd:添加标记。在窗体的OnInitDialog方法中判断当前添加联系人还编辑联系人,从而设置窗体标题。添加AddToCombo函数,用于将数据库中的联系人分组数据插入到分组组合框中。在窗体的OnButgroup中,设置“添加分组”按钮的单击事件,在该函数中调用“添加分组”窗体添加新的分组,并将新的分组插入到组合框中。在窗体的OnButok中,设置“确定”按钮的单击事件,在该函数中将用户设置的联系人信息保存到数据库中。添加分组窗
51、体界面是1个基于对话框资源。在该对话框中添加控件1个文本框控件、1个列表视图控件、2个静态文本控件和2个按钮控件。控件的属性设置如表7。表7 分组窗体界面控件设置表控件ID控件属性关联变量IDC_ LIST1无View: Small IconClistCtrl m_GridIDC_ EDIT1无CEdit m_Name IDC_ BUTOK勾选Owenr drawCbuttonHot m_OKIDC_BUTCANCLE勾选Owenr drawCbuttonHot m_Cancle添加联系人窗体在OnInitDialog方法中创建图像列表,并使用图像列表控件关联图像列表。在该窗体的OnButok
52、方法中,设置“确定”按钮的单击事件,在该事件的处理函数中将用户设置的分组名称插入到数据库中。本模块中的工具栏除了提供“添加”按钮外,还有“编辑”按钮、“删除”按钮和“分组”按钮,其中分组按钮是根据“添加分组窗体”提供的信息来排列联系人列表,默认的情况下通过“同事”和“朋友”的分组。当用户单击“编辑”按钮后,弹出编辑对话框,用户在该对话框内修改联系人的信息。4.2.7 使用MAPI函数实现发送功能的详细设计本系统使用MAPI函数发送电子邮件,实现的步骤如下:(1) 声明MAPI函数原型在主面界窗体的头文件引入mapi.头文件,然后在主面界窗体声明MAPI函数原型。在主界面源文件中声明MAPI函数
53、原型。代码如下:ULONG (PASCAL *lpfnMAPISendMail) (LHANDLE lhSession, ULONG ulUIParam, lpMapiMessage lpMessage, FLAGS flFlags, ULONG ulReserved); ULONG (FAR PASCAL *lpfnMAPILogon)(ULONG ulUIParam, LPSTR lpszProfileName, LPSTR lpszPassword, FLAGS flFlags, ULONG ulReserved, LPLHANDLE lplhSession); ULONG (FAR P
54、ASCAL *lpfnMAPILogoff)(LHANDLE lhSession, ULONG ulUIParam, FLAGS flFlags, ULONG ulReserved); ULONG (FAR PASCAL *lpfnMAPIFreeBuffer)(LPVOID lpBuffer);(2)使用MAPI发送邮件使用MAPI发送邮件时,首先在主界面对话框的线程函数ThreadProc装载MAPI32.DLL动态链接库,用lpfnMAPILogon函数开启一个对话,然后设置MapiMessage结构指针,通过MapiMessage结构指针设置发送邮件信息,然后调用lpfnMAPISendMail函数发送邮件。在发送前需要定义一个MapFileDesc结构数组。该数组用来保存附件信息,数组中的每一个元素都对应一个附件信息。在设置MapFileDesc结构时,将MapFileDesc结构数组赋值给MapiMessage结构的lpFile成员。代码如下:HMODULE result = LoadLibrary("mapi32.dll"); /加载动态库/获取函数指针(FARPROC&)lp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44770-2024智能火电厂技术要求
- 拖拉机买卖合同范本
- 日光温室大棚租赁合同范本2篇
- 二零二四年度版权购买合同:网易云音乐版权购买协议3篇
- 人合伙生意简单协议书范本
- 2024年度工程居间与5G技术应用合同3篇
- 2024年度居间合同:工程设计中介5篇
- 光伏太阳能板质量争议解决合同2024年度
- 2024年度钢筋工程材料配送与物流服务合同
- 财会职业访谈报告范文
- 2024年食品安全生产经营大比武理论考试题库-下(多选、判断题)
- 一年级拼音默写表
- 光伏发电项目并网接入系统方案
- 完整版牙体牙髓病学总结
- 印刷常见不良与解决对策汇总
- 食材验收管理小组及职责
- 本科教学工作审核评估学院汇报PPT课件
- 回转窑安装施工方案
- 城市轨道交通车站的作用
- 联合国国际货物买卖合同公约(CISG)
- 从组织行为学的视角探讨医院办公室管理工作
评论
0/150
提交评论