1、计算网络课程设计 学 院_ _ 计算机学院_专 业_网络工程_年级班别_2012级(3)班 _ _ 学 号_ 3112006443 学生姓名_王彦德_课 题 简单的电子邮件客户端指导教师_ 何翠红 _ 成 绩 计算机网络课程设计任务书设计题目利用MyEclipseSWT-Designer实现电子邮件客户端 已知技术参数和设计要求1.设计图形用户接口(GUI)的电子邮件客户端,与收件人SMTP服务器交互,实现邮件的发送。2.界面设计中至少包含用户输入收件人地址、邮件主题、发件人地址、文本电子邮件内容编辑等的编辑框,以及发送邮件(Send)、清除邮件内容(Clear)、退出客户端(Exit)等的命
2、令按钮等。3.如果可能,实现附件发送,完成该项功能将得到加分。设计内容与步骤1.阅读RFC821-Simple Mail Transfer Protocol,熟悉SMTP协议;2.熟悉Java Socket实现网络通信的基本机制;3.熟悉TCP Socket程序设计方法;4.熟悉MyEclipse+SWT-Designer的GUI应用程序开发环境的安装、使用;5.电子邮件客户端用户界面设计;6.电子邮件客户端功能实现;7.课程设计任务说明书。设计工作计划与进度安排1.SMTP 4小时2.Java TCP Socket程序设计基础 2小时3.MyEclipseSWT-Designer环境安装与使
3、用 8小时4.电子邮件客户端GUI界面设计 4小时5.电子邮件客户端功能实现 12小时6.课程设计说明书 10小时目录简单邮件客户端设计说明书1一 前言1二 需求分析12.1 功能需求12.2开发环境工具12.3 所需要的知识2三 概要设计23.1 邮件系统各功能概述23.1.1 JavaMail简介23.1.2 设计目标33.1.3 系统功能概述33.2 邮件管理系统总体设计方案43.2.1 系统体系结构43.2.2 功能模块43.3 系统开发的技术难点和解决方案53.3.1 MIME Messsage的解析53.3.2 邮件发送63.3.3 系统性能问题63.4 系统特点73.5 系统具体
4、设计73.6 关键代码113.7 结束语20 简单邮件客户端设计说明书 一 前言随着互联网技术及网络办公化的发展,电子邮件成为人们主要的通信方式之一。越来越多的人开始使用它。而且用它的人数势必会继续增加。虽然,现在已经有很多的邮件收发软件例如著名的FoxMail ,但是对于大多数的非专业的人来说它还是有点难度。因此,我们所设计的基于JavaMail的邮件收发系统就利用JavaMail开发包的高级应用和E-Mail的相关协议开发出这个功能相对简单,但是实用、方便、快捷的邮件收发系统。主要用于帮助用户将邮件发送给SMTP服务器和从POP3邮件服务器读取用户的电子邮件。它集邮件的撰写、发送和接收功能
5、与一体。并且支持附件的发送和接收以及其它一些附加功能的实现。虽然它没有FoxMail那么强大的功能,但是它容易掌握和使用。整个系统功能流畅,从操作简便、界面友好、灵活实用的要求出发,使用户之间的交流能够更加地方便和快捷。本人结合SMTP以及POP3协议的实现原理、相关JavaMail API帮助文档以及相关参考书,实现了一个工作在PC下的邮箱客户端程序,该程序基本上实现了一个邮箱所对应的所有功能。二 需求分析2.1 功能需求(1)开发一个JavaMail API下的邮箱客户端,实现邮件的发送、接收以及。(2)通过输入服务器地址、用户名、密码,可以实现远程FTP服务器登录。(3)提供本地文件和文
6、件夹的上传功能,对FTP主机文件进行下载和删除。(4)提供对本地目录的读取与返回,能够列出文件和文件夹。(5)FTP提供两种工作模式的选择,Port模式(主动模式)和Passive模式(被动模式)。2.2开发环境工具(1)使用编程工具:MyEclipse SWT-Designer(2)使用的语言:Java(3)开发平台:Mac OS X 10.6.82.3 所需要的知识(1)计算机网络的基本知识(2)了解SMTP协议以及POP3协议基本实现原理(3)使用Windows下的Eclipse编译器的使用方法(4)熟悉邮件的各项功能。三 概要设计3.1 邮件系统各功能概述3.1.1 JavaMail简
7、介JavaMail API是Java EE的一部分,是Java SE的可选组件。该组件提供了一个平台无关、协议独立的框架,预置了一些最常用的邮件传送协议的实现方法,通过一组API来模拟邮件系统。提供Email的发送和接收服务。它借鉴了IMAP、MAPI、CMC等消息系统API的设计,采用面向对象的思想将接2008年4月18日收到接口与实现相分离,支持存取方式、消息格式、消息传送协议不同的邮件消息系统,可以简便的为应用程序增加Email支持,广泛应用于构件邮件和消息应用系统 JavaMail API封装了电子邮件功能中:邮件对象、发送、身份认证、接收等功能。其核心类有:Session、Authe
8、nticator Address Message Transport、Store、Folder等。其中Session是邮件操作的接口,用于建立了基本的邮件会话;Authenticator类提供访问邮件服务器所需的认证信息;Message描述基本的邮件消息,是收发邮件的操作单位;Transport是发送邮件时所用的协议,通常是SMTP;Store模拟了消息数据库及其内部存储消息的目录的访问协议;Folder用于描述消息数据库中的目录结构。一个Session会有多个Transport,每个Store包含一系列的Folder和Message,每个Folder又包含一系列的Folder和Message
9、。借助这些类,就可以构建各种典型的邮件应用。JavaMail的最新实现是14版本,可以支持POP3、IMAP4、SMTP协议。由于JavaMail还需要JavaBeans Activation Framework(JAF)框架的支持,3.1.2 设计目标公用邮箱是和外单位交互的主要渠道,用户获取和提交一些重要数据和文件,也是与本单位其它部门进行业务的信息交换的重要渠道。公用邮箱不仅有13常办公相关的各类邮件,还有很多其它种类的邮件。此外,一些与办公相关的邮件还会发送到工作人员的个人邮箱中。工作人员使用Foxmail或其它邮件客户端将公用邮箱中的邮件从服务器下载至本地,然后进行处理。这样的工作模
10、式存在的缺点有:邮箱中邮件太多,很难找到与工作相关的邮件,工作效率低下,存在潜在处理风险;工作人员都利用邮件客户端存储和处理邮件,造成资源浪费,且无法及时得悉邮件的处理情况,难以落实责任;难以对办公相关的邮件进行统一归档和备份,并提供检索、统计、数据分析等服务;邮件帐号分散管理,带来潜在的信息安全隐患。本系统的设计旨在解决这些问题,为工作人员提供一个基于Web的简洁、易用、安全可靠、功能完备的办公邮件处理平台。3.1.3 系统功能概述(1)邮件自动获取与过滤系统每天实时或者在固定的时间,统一收集多个外部邮件服务上多个邮件帐号的新邮件后汇总在一起,并根据发送地址和过滤规则对邮件进行过滤,提取服务
11、器上的有效邮件,通过人工干预或者自动化的机制将邮件基本信息存储在数据库中,附件存人文件服务器,对完全重复的邮件通过比对后只保留一份。(2)邮件分类对过滤后的有效邮件,按照制定好的分类规则,根据邮件主题、发件人信息、附件属性及关键词对邮件及其附件进行归类,并提供自动归类和人工干预后确定邮件类别两种灵活的类别确认机制。(3) 邮件提醒与处理在邮件归类后,对于新邮件,系统通过与短信发送平台的接口,将发件人、发送时间、主题、优先级等信息以短信的形式发送给相应邮件类别的处理者。邮件处理者通过网页登陆系统,可以像使用Web邮箱那样,方便快捷的查阅和处理只属于自己需要处理的那些邮件。(4) 邮件管理系统向用
12、户提供邮件检索、删除、调整分类等功能。可以统一直观的对:信息过滤情况、信息分类跟踪、处理情况、审阅结果、处理者信息、反馈情况等进行展示。还可以对邮件进行统计,生成月度及年度邮件统计报表。普通用户只能管理与自己工作相关的邮件,系统管理员可以管理所有邮件。(5)邮件帐号设定及过滤和分类规则定义系统管理员可根据需求设定多个邮件帐号,将不同邮箱的邮件汇总在一起。过滤规则是系统选择接收邮件的依据,目前状况下,对邮件地址和发送时间进行过滤已能满足需求。分类规则是对邮件进行分类的依据,对每个公司或单位,管理员可以根据业务类型定义邮件及附件类别,然后指定该类别邮件的关键词、特征及处理者。3.2 邮件管理系统总
13、体设计方案3.2.1 系统体系结构系统基于BS结构,采用MVC(Mode1ViewController)模式,体系结构系统采用三层结构:第一层是客户端层,用户通过IE、Firefox等浏览器与系统交互,发起浏览、检索、处理邮件、系统配置与管理等请求,并展示处理结果。第二层为服务器层,可以分为两个功能相对独立的部分,一个是Web服务器,用于响应和处理客户端请求,通过请求处理程序与后台数据库交互,返回处理结果给浏览器;一个是邮件处理部分,通过JavaMail API与邮件服务器交互,发送和接收邮件,并对有效邮件进行解析与分类,将结果存放在数据库和文件系统中,然后借助短信发送平台的接口通知用户处理邮
14、件。第三层为数据层,包括:用于存储系统信息、邮件信息的数据库服务器,存储邮件附件的文件服务器。为了提高系统可扩展性和满足复杂应用逻辑的需求,在系统第二层的Web应用中,是MVC模式的一种实现。3.2.2 功能模块系统涵盖了运行中心日常邮件管理与维护的所有功能,共分为六个模块:邮件获取模块、邮件发送模块、邮件分类模块、邮件处理模块、邮件管理模块、联系人模块。这些模块功能相对独立,具有高内聚、低耦合的特点,每个模块都有定义良好的接口,可以扩展和增加复杂的应用逻辑。其中,邮件发送模块可以发送文字,图片,附件,并可以同时发送给不同的邮箱。其中可编辑发送文字的大小格式颜色等。邮件获取模块可以获取邮件,在
15、收件箱可以看到邮件列表,刷新可见新邮件。邮件分类模块是将邮件客户端分为发信箱,收信箱,已发送,已删除邮件管理模块是可对邮件删除,回复,彻底删除,对已删除的邮件可以恢复,刷新收信箱。邮件处理模块是对邮件的查看,下载附件,回复。联系人模块是可以添加,删除联系人,发邮件的时候可以直接点击已添加过的联系人进行发送。3.3 系统开发的技术难点和解决方案3.3.1 MIME Messsage的解析MIME(Multipurpose Internet Mail Extension)协议是目前应用最广泛的邮件协议,用于定义邮件的格式,它可以包含文本、图像、音频、视频以及其它应用程序专用的数据。邮件的解析实际上
16、可以就是解析MIME消息的过程,是邮件过滤、分类、管理等工作的前提。通常情况下,一个MIME消息由消息头(Headers)和消息体(Content)组成。消息头包括:发送者、接收者、发送时间、主题、优先级、邮件内容类型、MIME版本号等信息。消息体为邮件的内容,它可以为简单的文本,也可以是包含多个分段(Part)的多重消息(Muhipart),而其中每个分段的消息都有自己的消息头和消息体。对于不带附件的简单邮件,其消息体的内容类型是纯文本,text/plain或者text/html等。对于带附件或者包含多种内容格式的邮件,其消息体为muhipart类型,通常为:muhipart/mixed、m
17、uhipart/related或multipart/alternative.比如:邮件正文、附件、HTML信件等。因此,邮件消息的解析过程实际上是一个后序周游整棵MIME消息树的过程。消息的解析需要递归访问消息中的每个消息体,也就是树的叶结点,从中获取相关信息,并生成一个邮件对象,用于随后的邮件分类和写人数据库操作。在解析时,需要将发送者、接收者、主题、发送时间、正文等有用信息存储在定义好的邮件对象中,将附件和HTML格式的信件存储在文件系统,并将附件的文件名和文件路径存储在邮件对象中。3.3.2 邮件发送Email的发送实际上就是构造一个MIME消息的过程。JavaMail API提供了相应
18、的接口用于构造一个邮件消息,但是相对较复杂。本系统采用Apache的开源工具包Commons Email来实现邮件发送。Commons Email构建于JavaMail API上,对JavaMail进行了再封装,提供了极为简便的借口用于通过Java程序发送Email。它提供的主要类有:SimpleEmail(用于发送简单的文本类型Email)、MultiPartEmail(用于发送带附件的Email)、HtmlEmail(用于发送Html格式的邮件)、EmailAttachment(描述Email的附件)。借助Commons Email工具包发送一个简单Email只需要创建SimpleEmai
19、l对象,设置SMTP服务器、认证信息、发送者、接收者、主题、正文,然后发送即可。要发送一个带附件的邮件,只需要构造一个MuhiPartEmail对象,设置和简单Email一样的属性,然后构造附件对象并将之附加在MuhiPartEmail中即可。不难看出采用了Commons Email工具包后,邮件的发送十分简洁,只需要构建相应的附件和邮件内容即可,而且工具包还支持直接用网络上的文件作为附件内容。3.3.3 系统性能问题邮件服务器上可能会有很多封邮件,如何判断一封邮件是否被处理过,并对未处理的邮件消息进行过滤与分类是系统的一个性能瓶颈。系统基于Web技术构建客户端,而Web应用程序不可避免的会有
20、频繁的数据库操作,建立数据库连接是相当耗费资源和时间的操作。在JSP应用中若直接采用JDBC接口访问数据库,必然会频繁建立和关闭数据库连接,从而导致服务器性能下降。为保证系统高效运行,采用如下的策略来提高整体性能: (1)多线程技术每个Email消息的处理是相对独立的过程,因而采用多线程技术同时处理多封邮件是提高性能的最简单可行的做法。系统共使用8个线程处理邮件消息,根据邮件消息的总数 ,就能计算出每个线程所需要处理的消息数为N=M8(表示取上整)。其中第k个线程处理邮件消息队列中第8i+k(i=0,1, ,N一1)个消息,以倒序的方式处理可以使得消息相对均匀的分配给处理线程,并保证有效消息先
21、被处理。 (2) 灵活高效的过滤机制每个Email都会对应一个固定的MessageID和SentDate,在解析时很容易获取。系统会对每个帐号设定邮件开始接收13期(ReceiveStartDate),在处理Email消息时,先根据SentDate来判断,若在该13期前,则不予以处理。每次接收完成后,更新ReceiveStartDate至当前13期。为了避免重新设定ReceiveStartDate或者重新执行接收任务时,对已经处理过的有效邮件重复处理,系统提供两种机制,一种是不在服务器上保留副本,这样每次获取的必然是新邮件;一种是保留副本,但利用Property文件记录每个符合要求的消息的处理
22、情况,以便快速判断邮件消息是否被处理过。(3) 采用数据库连接池技术连接池会在初始化时保持一定数量的数据库连接,应用程序在操作数据库时,从连接池中获取一个连接,完成操作后释放连接,这样大大提高了系统性能。保存邮件信息至数据库时,系统采用Apache DBCP Component来建立数据库连接池。在系统的Web应用部分,通过配置Tomcat数据源来建立数据库连接池。3.4 系统特点系统借助JavaMail API实现了一个简单的基于Web的邮件客户端,可以将不同邮件服务器的有效邮件聚合在一起进行统一归档管理,并提供统一、友好的界面以方便相关人员处理邮件。系统在自动化的基础上提供选择性干预的机制
23、,以应对一些特殊情况。系统使用Java语言开发,基于BS结构,采用MVC模式,系统层次清晰,结构合理。在后台处理程序和应用逻辑的设计中,采用面向对象的设计方法和分层设计思想,将抽象和实现相分离,具有很好的可扩展性好。为了提高系统性能,采用了多线程技术和连接池技术,系统执行效率高。系统支持自定义简单的过滤规则、邮件类别、分类规则,并能很容易的进行扩展以支持复杂的自动化分类技术。3.5 系统具体设计登陆界面功能目录发送邮件邮件已发送对方收到邮件并回复邮件后刷新收信箱收信箱列表,收到对方回复的新邮件读取邮件内容已发送邮件列表对邮件的操作:回复邮件3.6 关键代码3.7 结束语本系统目前已完成核心功能模块的开发,正在进行界面开发和测试中,即将投入使用。系统借助JavaMail API和Web技术,对外部邮件服务器上不同邮件帐号的邮件进行分类和统一集中管理,并及时通知工作人员处理邮件,解决了邮件管理混乱、处理效率低下、备份难度大等问题,提供了一个界面友好、使用方便的邮件综合管理系统。本系统的研究,为企业的邮件综合管理提供了一种高效、可行的解决方案,有着广泛的应用前景。但在邮件处理方面还需要改进,有待于引进复杂的算法和技术,并使用更灵活的分类框架,实现智能化、自动化、高效的邮件管理。