java邮件系统设计论文_第1页
java邮件系统设计论文_第2页
java邮件系统设计论文_第3页
java邮件系统设计论文_第4页
java邮件系统设计论文_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.66/66成员负责模块进(组长)服务器管理模块、管理之发送模块,其他模块有参与马昌修改用户信息模块,其他模块有参与高宁管理模块(重要)何骥越登录模块王贺注册模块网络系统电子作为Internet最为广泛的应用之一,在人们的工作和生活中扮演着重要的角色,应用的普与使电子技术有了飞速的发展。网络电子系统在当今的互联网上比比皆是,不管是windows上的普与,还linux上的稳定可靠和低廉;不管是分布式系统,还是基于P2P,都离不开系统的基本原理。传输原理在Internet上将一段文本信息从一台计算机传送到另一台计算机上,可通过两种协议来完成,即SMTP(SimpleMailTransferProtocol,简单传输协议)和POP3(PostOfficeProtocol,邮局协议3)。SMTP是Internet协议集中的标准。在Internet上能够接收电子的服务器都有SMTP。电子在发送前,发件方的SMTP服务器与接收方的SMTP服务器联系,确认接收方准备好了,则开始传递;若没有准备好,发送服务器便会等待,并在一段时间后继续与接收方服务器联系。这种方式在Internet上称为“存储——转发”方式。POP3可允许E-mail客户向某一SMTP服务器发送电子,另外,也可以接收来自SMTP服务器的电子。换句话说,电子在客户PC机与服务提供商之间的传递是通过P0P3来完成的,而电子在Internet上的传递则是通过SMTP来实现。如图所示:发送主机发送主机服务器B服务器A客户SMTPPOPInternet注:服务器A是发送服务器(SMTP),服务器B是接收服务器(POP3/IMAP)1.电子的发送和接收电子在Internet上发送和接收的原理可以很形象地用我们日常生活中邮寄包裹来形容:当我们要寄一个包裹的时候,我们首先要找到任何一个有这项业务的邮局,在填写完收件人、地址等等之后包裹就寄出而到了收件人所在地的邮局,那么对方取包裹的时候就必须去这个邮局才能取出。同样的,当我们发送电子的时候,这封是由发送服务器(任何一个都可以)发出,并根据收信人的地址判断对方的接收服务器而将这封信发送到该服务器上,收信人要收取也只能访问这个服务器才能够完成。2.电子地址的构成电子地址的格式是“USERSERVER”,由三部分组成。第一部分“USER”代表用户信箱的,对于同一个接收服务器来说,这个必须是唯一的;第二部分“”是分隔符;第三部分“SERVER”是用户信箱的接收服务器域名,用以标志其所在的位置。3.电子的工作原理电子与普通有类似的地方,发信者注明收件人的与地址(即地址),发送方服务器把传到收件方服务器,收件方服务器再把发到收件人的中。更进一步的解释涉与到以下几个概念:MUA--MailUserAgent,用户代理,帮助用户读写;MTA--MailTransportAgent,传输代理,负责把由一个服务器传到另一个服务器或投递代理;MDA--MailDeliveryAgent,投递代理,把放到用户的里。整个传输过程如下:目前使用的SMTP协议是存储转发协议,意味着它允许通过一系列的服务器发送到最终目的地。服务器在一个队列中存储到达的,等待发送到下一个目的地。下一个目的地可以是本地用户,或者是另一个服务器。如果下游的服务器暂时不可用,MTA就暂时在队列中保存信件,并在以后尝试发送。关于系统的其他一些技术,我们暂且不考虑。如下所示:服务器提供了系统的基本结构,包括传输、分发、存储等功能,以确保能够发送到Internet网络中的任意地方。目前服务器有两种不同的应用群体:ISP提供商和企事业单位。Web技术,使用户可以在任何地方使用浏览器登录服务器收发,而不用配置客户端程序。多域服务是一台物理服务器为多个独立注册Internet域名的企业或单位提供电子的服务,在逻辑上,这些企业和单位拥有自己独立的服务器(企业邮局),也可以称为虚拟服务器技术。对于ISP提供商和企业集团公司来说,多域服务器的支持能力是选择服务器的一个重要考虑因素。它可以方便地扩展其横向服务能力。使用Linux作为服务器,可以与Sendmail、MySQL等开源软件共同使用,在满足用户需求的基础上降低了系统价格。服务器的安全防护,包括数据身份认证、传输加密、垃圾过滤、病毒过滤、安全审计等的多项安全技术。身份认证主要指SMTP发信认证,此项功能对于服务器是一个可选功能,主要目的是防止黑客利用自己的服务器攻击其他服务器。完善SMTP身份认证不仅可以制止黑客的恶劣行为,同时可以保证自己的服务器的各种资源可以充分地应用到日常的处理过程中,不会造成服务器的系统崩溃和资源浪费。无论是POP3协议还是SMTP协议,由于其在设计之初的缺陷,全部使用明码进行消息的传递,因此很容易造成信息的泄漏。可以通过两种方式提高系统的安全性:链路加密和端对端加密。链路加密是使用加密工具(软硬件工具)对传输的线路进行数据加密,需要网络设施的支持。端对端加密是客户端到客户端的加密,是服务器应当提供的功能,目前较为流行的方式是使用SSL/TLS进行传输加密。垃圾大多是一些带有商业性质的广告等宣传品。据估计,仅仅商业性垃圾一项,每封垃圾所抵消的生产力成本就在1美元左右。单是下载垃圾所花费的上网费与费,每年就要花掉全球网民94亿美元。此外,许多病毒以与和信用卡盗用案例也与垃圾有关。因此,需要服务器具有垃圾处理的功能,抵御大部分垃圾的攻击。黑客攻击和病毒本来是两个相对独立的技术体系,但是随着网络的不断发展,网络工具与病毒越来越趋于融合,比如尼姆达病毒既是病毒,也是网络攻击的一种方式,而应用广泛的电子,也成了病毒传播的主要方式之一。目前,大多数服务器都具有了基本的病毒防护的能力。目前的服务器,仅中文就有若干字符集,如GB-2312、Big5等等,虽然我们可以统一标准,但是,在实际的过程中,我们不可能统一所有的客户端,因此我们只能要求服务器支持多语言的环境。由于目前许多服务器处于电信托管等方式(服务器托管、服务器租用),不可能经常进行本地操作,因此目前服务器均提供了远程监控的功能。可以通过Web方式,监控服务器的工作状态,包括在线用户数、处理数量和速度、存储空间使用率等,并且可以随时对出现的发信高峰和网络攻击进行远程处理。电子系统应该具备无限的扩展能力,Internet网络的一个特性是变化无常,需要应对随时而来的应用尖峰。因此,需要电子系统具有无限的可扩展能力,这个能力主要体现在的处理能力和的存储能力上。为了能够使的处理能力可以无限扩展,就需要引入集群和负载均衡技术,使应用平台可以在需要的时候无限扩充,满足长期或临时的业务需要。对于2000万以上的用户来说,每天发送的量至少在几千万封,为了便于存储,需要高性能的存储解决方案,最为理想的应该是SAN技术在服务器领域的应用。常见协议:SMTP(SimpleMailTransferProtocol):SMTP主要负责底层的系统如何将从一台机器传至另外一台机器。POP(PostOfficeProtocol):目前的版本为POP3,POP3是把从电子中传输到本地计算机的协议。IMAP(InternetMessageAccessProtocol):目前的版本为IMAP4,是POP3的一种替代协议,提供了检索和处理的新功能,这样用户可以完全不必下载正文就可以看到的标题摘要,从客户端软件就可以对服务器上的和文件夹目录等进行操作。IMAP协议增强了电子的灵活性,同时也减少了垃圾对本地系统的直接危害,同时相对节省了用户察看电子的时间。除此之外,IMAP协议可以记忆用户在脱机状态下对的操作(例如移动,删除等)在下一次打开网络连接的时候会自动执行。本系统主要从简单的客户端来探讨一个系统。利用JavaMail来实现。以下是关于JavaMail的一些基本知识:JavaMail,顾名思义,提供给开发者处理电子相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的传输。我们可以基于JavaMail开发出类似于MicrosoftOutlook的应用程序。虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(JavaDevelopmentKit),这就意味着你在使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeansActivationFramework(JAF)。JavaBeansActivationFramework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持。在Windows2000下使用需要指定这些文件的路径,在其它的操作系统上也类似。JavaMail是可选包,因此如果需要使用的话你需要首先从java.sun下载。目前最新版本是JavaMail1.4,使用JavaMail的时候需要JavabeanActivationFramework的支持,因此你也需要下载JAF。安装JavaMail只是需要把他们加入到CLASSPATH中去,如果你不想修改CLASSPATH的话,可以直接把他们的jar包直接copy到JAVA_HOME/lib/ext下。这样JavaMail就安装好了。JavaMail包中用于处理电子的核心类是:Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定义了一个基本的会话,它需要从Properties中读取类似于服务器,用户名和密码等信息。Javax.mail.Session:Session类定义了一个基本会话(session),是JavaMailAPI最高层入口类。所有其它类都是经由这个session才得以生效。Session对象用Java.util.Properties对象获取信息,如服务器、用户名、密码与整个应用程序中共享的其它信息。

Javax.mail.Message:一旦获得Session对象,就可以继续创建要发送的消息。这由Message类来完成。因为Message是个抽象类,必需用一个子类,多数情况下为Jernet.MimeMessage。MimeMessage是个能理解MIME类型和头的电子消息,正如不同RFC中所定义的。虽然在某些头部域非ASCII字符也能被译码,但Message头只能被限制为用US-ASCII字符。

Javax.mail.Address:一旦您创建了Session和Message,并将容填入消息后,就可以用Address确定信件地址了。和Message一样,Address也是个抽象类。您用的是Jernet.InternetAddress类。

Javax.mail.Authenticator:与J类一样,JavaMailAPI也可以利用Authenticator通过用户名和密码访问受保护的资源。对于JavaMailAPI来说,这些资源就是服务器。JavaMailAuthenticator在Javax.mail包中,而且它和J中同名的类Authenticator不同。两者并不共享同一个Authenticator,因为JavaMailAPI用于Java1.1,它没有J类别。

要使用Authenticator,先创建一个抽象类的子类,并从getPasswordAuthentication()方法中返回PasswordAuthentication实例。创建完成后,您必需向session注册Authenticator。然后,在需要认证的时候,就会通知Authenticator。您可以弹出窗口,也可以从配置文件中(虽然没有加密是不安全的)读取用户名和密码,将它们作为PasswordAuthentication对象返回给调用程序。

Javax.mail.Transport:消息发送的最后一部分是使用Transport类。这个类用协议指定的语言发送消息(通常是SMTP)。它是抽象类,它的工作方式与Session有些类似。仅调用静态send()方法,就能使用类的缺省版本:Transport.send(message);或者,读者也可以从针对自己的协议的会话中获得一个特定的实例,传递用户名和密码(如果不必要就不传),发送消息,然后关闭连接。

Javax.mail.Store:Store类实现特定协议上的读、写、监视、查找等操作。通过Javax.mail.Store类可以访问Javax.mail.Folder类。

Javax.mail.Folder:Folder类用于分级组织,并提供照Javax.mail.Message格式访问email的能力。

具体用法大家可以查看JavaMailAPI。简单示例:packagefss.base;importjava.util.*;importjavax.mail.*;ernet.*;importjava.util.Date;importjavax.activation.*;importjava.io.*;publicclassMail{//把本程序所用变量进行定义。具体在main中对它们赋植。privateMimeMessagemimeMsg;//MIME对象privateSessionsession;//会话对象privatePropertiesprops;//系统属性privatebooleanneedAuth=false;//smtp是否需要认证privateStringusername="";//smtp认证用户名和密码privateStringpassword="";privateMultipartmp;//Multipart对象,容,标题,附件等容均添加到其中后再生成//MimeMessage对象publicMail(Stringsmtp){setSmtpHost(smtp);createMimeMessage();}publicvoidsetSmtpHost(StringhostName){System.out.println("设置系统属性:mail.smtp.host="+hostName);if(props==null)props=System.getProperties();//获得系统属性对象props.put("mail.smtp.host",hostName);//设置SMTP主机}publicbooleancreateMimeMessage(){try{System.out.println("准备获取会话对象!");session=Session.getDefaultInstance(props,null);//获得会话对象}catch(Exceptione){System.err.println("获取会话对象时发生错误!"+e);returnfalse;}System.out.println("准备创建MIME对象!");try{mimeMsg=newMimeMessage(session);//创建MIME对象mp=newMimeMultipart();//mp一个multipart对象//Multipartisacontainerthatholdsmultiplebodyparts.returntrue;}catch(Exceptione){System.err.println("创建MIME对象失败!"+e);returnfalse;}}publicvoidsetNeedAuth(booleanneed){System.out.println("设置smtp身份认证:mail.smtp.auth="+need);if(props==null)props=System.getProperties();if(need){props.put("mail.smtp.auth","true");}else{props.put("mail.smtp.auth","false");}}publicvoidsetNamePass(Stringname,Stringpass){System.out.println("程序得到用户名与密码");username=name;password=pass;}publicbooleansetSubject(StringmailSubject){System.out.println("设置主题!");try{mimeMsg.setSubject(mailSubject);returntrue;}catch(Exceptione){System.err.println("设置主题发生错误!");returnfalse;}}publicbooleansetBody(StringmailBody){try{System.out.println("设置体格式");BodyPartbp=newMimeBodyPart();bp.setContent("<meta-equiv=Content-Typecontent=text/html;charset=gb2312>"+mailBody,"text/html;charset=GB2312");mp.addBodyPart(bp);returntrue;}catch(Exceptione){System.err.println("设置正文时发生错误!"+e);returnfalse;}}publicbooleanaddFileAffix(Stringfilename){System.out.println("增加附件:"+filename);try{BodyPartbp=newMimeBodyPart();FileDataSourcefileds=newFileDataSource(filename);bp.setDataHandler(newDataHandler(fileds));bp.setFileName(fileds.getName());mp.addBodyPart(bp);returntrue;}catch(Exceptione){System.err.println("增加附件:"+filename+"发生错误!"+e);returnfalse;}}publicbooleansetFrom(Stringfrom){System.out.println("设置发信人!");try{mimeMsg.setFrom(newInternetAddress(from));//设置发信人returntrue;}catch(Exceptione){returnfalse;}}publicbooleansetTo(Stringto){System.out.println("设置收信人");if(to==null)returnfalse;try{mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));returntrue;}catch(Exceptione){returnfalse;}}publicbooleansetCopyTo(Stringcopyto){System.out.println("发送附件到");if(copyto==null)returnfalse;try{mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));returntrue;}catch(Exceptione){returnfalse;}}publicbooleansendout(){try{mimeMsg.setContent(mp);mimeMsg.saveChanges();System.out.println("正在发送");SessionmailSession=Session.getInstance(props,null);Transporttransport=mailSession.getTransport("smtp");//???transport.connect((String)props.get("mail.smtp.host"),username,password);transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));//transport.send(mimeMsg);System.out.println("发送成功!");transport.close();returntrue;}catch(Exceptione){System.err.println("发送失败!"+e);returnfalse;}}publicstaticvoidmain(String[]args){Stringmailbody=".laabc.用户注册测试<fontcolor=red>欢迎光临</font><ahref=\".laabc.\">啦ABC</a>";Mailthemail=newMail("smtp.126.");themail.setNeedAuth(true);if(themail.setSubject("laabc测试")==false)return;//容支持html如<fontcolor=red>欢迎光临</font><ahref=\".laabc.\">啦ABC</a>if(themail.setBody(mailbody)==false)return;//收件人if(themail.setTo("shengshuai126.")==false)return;//发件人if(themail.setFrom("shengshuai126.")==false)return;//设置附件//if(themail.addFileAffix("#######")==false)//return;//附件在本地机子上的绝对路径themail.setNamePass("用户名","密码");//用户名与密码if(themail.sendout()==false)return;}}

需求分析电子作为Internet最为广泛的应用之一,在人们的工作和生活中扮演着重要的角色,应用的普与使电子技术有了飞速的发展。不仅在普通人的日常生活中,而且,已经成为现代企业外信息交流的必备工具,据统计Internet上有30%的业务是与电子有关的。企业拥有自己的系统,不仅能够提升企业形象,而且更重要的是能为企业带来实际效益。当然作为一个系统要考虑多方面,比如稳定性、安全性等其他一些因素,但由于某些原因,在此只实现最基本的客户端功能。Java为实现这种功能提供了丰富的类库,借此,在老师的指导下,我们开始了网络系统的开发。客户端让用户可以方便地管理服务器上自己的,方便地发送。要达到这个目的,要把用户的相关个人信息数据,相关的服务器信息(收发的服务器的域名、拥护登陆服务器的等)保存到客户端所在的服务器上的文件或者数据库里。为了提高客户端的响应速度,需要把用户的保存下来,这样以后就不用每次都连接到服务器上去获取了。通过上面的分析,客户端的主要功能需求分析描述如下:1.注册新用户由于是一个支持多用户的应用,在使用的时候需要有一个登陆的过程,而在应用刚开始提供给使用者使用的时候,不应该规定使用者将以什么样的登陆,所以需要在登陆界面上提供一个给使用者自己注册新用户的功能,这样可以创建应用的用户,保存用户的信息,为登陆做好准备。2.用户登陆用户登陆后,进入客户端的主界面,如果用户设置了默认服务器,则列出用户默认服务器上收件箱的所有,在该列表上用户可以选择只显示已读或者未读,或者删除。3.新增服务器用户第一次使用客户端的时候,至少要添加一个服务器来收发。服务器的信息包括:服务器名称、登陆(用户名和密码)、pop3(收)服务器域名、smtp(发)服务器域名、是否在该服务器上保留接受过的。提供一个服务器列表,在列表上可以修改、删除服务器信息。4.修改个人信息提供一个修改用户个人信息的界面。个人信息有:用户ID(登陆客户端的用户名)、密码、真实、默认服务器。5.接收用户登陆的时候自动从默认服务器上收取新,之后再在指定的间隔时间后自动接收新,同时提供一个按扭,用于用户手动接收。6.发送提供一个发送界面,在该界面上可以让用户输入发送、抄送、密送地址,如果有多个,多个地址间用英文分号隔开,可以编辑上传附件个数,可以让用户把保存为草稿,也可以直接发送。7.数据修改实时生效一部分用户数据将保存在客户端的会话里,当用户通过界面修改这部分数据时,要刷新会话里保存的相应数据。8.同时支持IE和Firefox能在MicrosoftInternetExplorer正常显示和使用的网页,不一定能在Firefox上正常显示和使用,这是在制作网页的时候需要注意的。系统设计从模拟用户的角度进行分析,对于一个的客户端,首先要确定其功能是什么,也就是用户想要系统做什么工作。有以上需求分析可确定需要建立的模块有:用户注册、用户登录、用户管理、服务器信息管理、管理等。由此分析如下模块图:WEB邮件客户端WEB邮件客户端用户注册用户登陆用户管理邮件服务器管理邮件管理登陆注册新用户修改个人信息发送邮件收取邮件删除邮件查看邮件列表增加服务器信息删除服务器信息修改服务器信息根据以上分析描述,基本确定了客户段应该要包括的模块,下面详细地来分析每一个模块所要实现的功能。用户注册模块该模块通过点击登录界面的“注册新用户”按钮进入,在用户注册界面,要求用户输入:登录ID,与登录用户名,必填,在客户端中,该ID是唯一的登录密码,必填,长度为1—8位显示名,即阿松时,接收人将看到的名字,一般是真实,长度为1—255个字节用户登录模块该模块的界面就是登录界面了,该模块是已注册用户进入客户端的唯一入口。在这里要求用户输入登录ID和密码,输入完成后直接按回车键或点击“登录“按钮来提交登录信息。对提交来的用户名进行校验,如果校验不通过,则弹出对话框提示用户输入的用户名或者密码有误;如果校验通过,则在会话中保存用户的登录ID,进入客户端的主界面,并在主界面上提供退出系统的入口。用户管理模块用户管理模块提供给用户修改个人信息的功能,可修改的个人信息有:登录密码、显示名和默认服务器。修改这些信息后,需要更新会话中保存的数据,让修改实时生效。服务器信息管理该模块提供一个当前用户已有的服务器列表,让用户添加、修改、删除服务器信息,实现接收多个服务器上的功能。添加服务器时,需要用户输入:服务器名,必填,用户给该服务器起的名称,以便于识别,最大航渡为32字节登录服务器的用户名,必填,最大长度为255字节登录服务器的密码,必填,最大长度为255字节pop3服务器域名,必填,最大长度为255字节smtp服务器域名,必填,最大长度为255字节是否在服务器保留备份,即是否在服务器上删除已经接收下来的,默认为否上述信息都可以修改,修改后需要更新会话中保存的数据,让修改实时生效。管理模块该模块主要包括以下几个功能:提供撰写并发送的编辑页面,在改界面上,用户需要填写收件人的地址、主题与容,可以填写要抄送或者密送的地址,也可以上传一个或者多个附件,可以进行发送或者保存为草稿的操作,可以在发送的同时把保存为已发送。提供一个收件箱列表,该列表以粗体字体显示未读,可以让用户选择只列出所有、未读或者已读。在该列表上用户可以选择多个,可以进行删除多个的操作,在列表上对于每个提供查看详细容的连接。提供查看详细容的界面,在该界面上显示的发件人、主题、的正文与附件文件名、文件大小并提供下载连接。在该界面上用户可以进行删除,写回复或者返回收件箱列表的操作。提供一个草稿列表,在该列表上用户可以选择多个,同时删除多个,对于米格提供进入编辑界面。UML设计(软件工程流程)Uml设计基本遵循课堂上老师所讲各图规格,由于篇幅所致,部分图样显示不理想,请多包含。用例总图2.用例描述用例名称:系统注册用例表识号:1参与者:用户简要说明:用户填写自己的基本注册信息,提交注册成功返回给用户自己已填写的信息。前置条件:用户用浏览器进入本系统,并且是未注册用户。基本事件流:用户进入本系统点击“用户注册”显示出一个文本框用户填写自己的地址确定后点击“注册”注册成功后返回给用户自己的地址用例终止其他事件流A1:在按“注册”按钮之前,用户随时可以按“返回”按钮,文本框的容不保存。返回主页异常事件流:注册未成功返回错误信息,用户确认。返回到本系统主页。后置条件:用户的信息被保存到系统数据库。注释:无用例名称:修改个人信息用例标识号:2参与者:用户简要说明:用户点击“用户管理”可以修改自己的信息,点确定后重新写入数据库信息前置条件:用户已登录本管理系统基本事件流:用户登录后点击用户管理。根据用户的需求填写自己要修改的信息容。修改确认后点击保存。返回给用户修改后的信息。用例终止。其他事件流A1:在按“保存”按钮之前,用户随时可以按“返回”按钮,文本框的容不保存。返回用户的首页异常事件流:用户输入的修改信息不合法,系统提示其错误。返回用户首页后置条件:用户新信息被保存到数据库。注释:无用例名称:登陆用例标识号:3参与者:用户简要说明:用户登陆到他的前置条件:用户已注册基本事件流:用户注册之后,可点击“登陆”进入登陆页面用户输入登陆ID,密码点击登陆按钮,进入自己的用例终止其他事件流:用户可在此界面,进行注册用户取消登陆异常事件流:提示输入错误,用户确认返回到登陆页面后置条件:用户输入信息正确,进入自己的注释:无用例名称:发送用例标识号:4参与者:用户简要说明:用户发送给收件人前置条件:用户已登录基本事件流:1、单击”写信”按钮2、进入发送页面3、用户在文本框编辑收件人,主题,容信息4、点击”发送”按钮,发送5、用例终止其他事件流:1、可以任意添加或删除附件2、若发送的占用空间太大,则添加不上3、收件人文本框里必须填写正确的地址异常事件流:1、提示错误信息,用户确认2、返回到发送页面后置条件:xx给xx的发送成功再写一封注释:无用例名称:接收用例标识号:5参与者:用户简要说明:用户收取,并查看信息前置条件:用户登录基本事件流:点击”收信”按钮进入查看页面点击某行发送的主题,则跳转到显示邮容页面件阅读容返回用例终止其他事件流:若发送的是附件,打开或下载压缩包到服务器是异常事件流:提示错误信息,用户确认返回到发送页面后置条件:无注释:无用例名称:删除用例标识号:6参与者:用户简要说明:用户对不想要的进行删除前置条件:用户已登录基本事件流:页面上有删除按钮点击你想删除的那行主题然后点击删除会出现一个”你确定删除吗?”若点击确定会删除此用例终止其他事件流:若点击否则不能进行删除异常事件流:提示错误信息,用户确认2、返回到发送页面后置条件:无注释:无用例名称:查看列表用例标识号:7参与者:用户简要说明:用户查看自己有多少,那些前置条件:用户已登录基本事件流:单击”查看”进入到列表页面所有的以列表的形式列出来用例终止其他事件流:若过多会分页显示异常事件流:提示错误信息,用户确认2、返回到发送页面后置条件:无注释:无用例名称:增加服务器信息用例标识号:8参与者:用户简要说明:用于设置收发的服务器前置条件:用户已登陆基本事件流:1、用户单击“添加服务器”,进入添加页面2、用户输入服务器名称、登录名、密码、pop3域名、smtp域名、是否保留备份等信息。3、用户确认无误后,点击“添加“按钮4、用例终止其他事件流:用户退出此页面异常事件流:对服务器域名检验的提示对一些未填项的提示后置条件:无注释:无用例名称:删除服务器信息用例标识号:9参与者:用户简要说明:如果某些服务器信息已无用,用户可以对起删除前置条件:用户已登录基本事件流:1、用户单击“删除服务器信息“,进入删除页面2、用户在服务器信息列表里选择要删除的服务器,并点击“删除“按钮3、用户点击提示中的“确认“按钮4、用例终止其他事件流:用户退出此也面异常事件流:删除服务器信息失败后置条件:无注释:无用例名称:修改服务器信息用例标识号:10参与者:用户简要说明:用户可以修改已添加的服务器信息前置条件:用户已登录基本事件流:1、用户单击“添加服务器信息“,进入添加页面2、用户输入需要修改的信息3、用户点击提示中的“保存“按钮4、用例终止其他事件流:用户退出此页面异常事件流:对一些未填项的提示后置条件:无注释:无序列图(由于软件运用的不成熟,有些图可能不是很完善,请见谅)注册模块登录模块修改个人信息模块服务器管理模块管理之发送模块管理之接收模块管理之删除管理之列表模块类图由于篇幅所致,一下以此是相应的类图。但还是有一些图效果不佳。敬请原谅。注册模块登录模块修改用户信息模块服务器管理模块管理之发送模块管理之接收模块管理之删除模块管理之列表模块三.数据库设计数据库用于保存系统需要持续使用的数据对象,通过对需求与系统的设计,客户端包含三个需要保存的对象实体:用户实体、实体、服务器实体。下面就来分析一下这些实体:实体分析用户实体用户是系统的使用者,系统需要为每个用户单独保存在运行过程中用到的用户信息,让用户感觉到只有自己一个人在使用系统。这些数据项可以参考ER图,这里就不在赘述。服务器实体该实体与用户实体在持久化层是一对多的关系,表现在一个用户可以设置多个服务器,而用户只能同时使用其中一个服务器,该服务器就是用户默认的服务器,它通过用户ID与用户实体关联。实体实体用于持久化,在客户端中,除附件外的信息持久化在数据库中,另外整封将以文件的形式保存在磁盘中。每封都属于唯一的用户与服务器,实体通过用户、服务器ID与用户实体、服务器关联。ER图分析数据表结构用户表user字段名字段类型是否可以为空字段长度说明id文本否32用户登录名display_name文本否255用户的真实password文本否8登录密码default_domain文本是32默认服务器服务器表domain字段名字段类型是否可以为空字段长度说明id文本否32唯一标示name文本否32服务器名称login_name文本否255服务器登录名login_password文本否32服务器登录密码Pop3_server文本否255Pop3服务器Smtp_server文本否255Smtp服务器keep_copy是/否是是否保存备份user_id文本否32所属用户ID表mail字段名字段类型是否可以为空字段长度说明id文本否32唯一标示msg_id文本是64消息IDsubject文本是255主题from文本是255发送者地址to文本是255接收者地址cc文本是255抄送地址bcc文本是255密送地址content备注是容is_html是/否是是否html格式sent_date日期/时间是发送日期时间is_read是/否是是否已读is_emergent是/否是是否紧急is_need_receipt是/否是是否需要回复mail_type数字是4类型(收件箱、已发送、草稿)save_time日期/时间是保存时间user_id文本否32所属用户IDdomain_id文本否32所属服务器IDattachment备注是附件原文件名列表,多个文件名之间用换汉服“\n”隔开创建数据库本系统选用Access数据库,下面给出建表用的SQL语句:创建user(用户)表createtableuser(idvarchar(32)primarykeynotnull,display_namevarchar(255)notnull,passwordvarchar(8)notnull,default_domainvarchar(32))创建domain(服务器)表createtabledomain(idvarchar(32)notnullprimarykey,namevarchar(32)notnull,login_namevarchar(255)notnull,login_passwordvarchar(32)notnull,pop3_servervarchar(255)notnul,smtp_servervarchar(255)notnull,keep_copyyes/nodefault0,user_idvarchar(32)notnull)创建mail()表Createtablemail(idvarchar(32)notnullprimarykey,msg_idvarchar(64),subjectvarchar(255),fromvarchar(255),tovarchar(255),ccvarchar(255),bccvarchar(255),contentlongchar,sent_datedatetime,is_readbit,is_emergentbit,is_need_receiptbit,mail_typeinteger,save_timedatetime,user_idvarchar(32)notnull,domain_idvarchar(32)notnull,attachmentlongchar)四.系统架构整个网络系统选用B/S结构,用JSP实现,主要用到servlet技术,运行在Tomcat容器中。下面介绍其细节。创建项目先看以下目录结构:mail目录是项目的根目录。src目录用于存放java源文件webroot目录是该项目将要生成的Web应用部署的上下文根目录。css目录存放HTML层叠样式表文件,images存放图片文件,js存放Javascript脚本文件,jsp存放JSP脚本文件。WEB-INF目录是JavaWeb应用必须的一个目录,服务器部署Web应用的时候需要在该目录下诏部署描述文件web.xml、装在类文件等。classes目录存放编译项目生成的class文件,lib目录存放相关的jar文件。(bin是MyEclipse生成的空文件)在WEB-INF目录下web.xml文件尤为重要,其主要配置如下:在具体配置之时,可能由于数据库文件和attachment文件的路径不一样,请予以修改。另外,程序需要用到几个工具包,包括:mail.jar,是JavaMailAPI包,提供了Java相关的API;activation.jar,mail.jar依赖于该jar;commons-fileupload-1.1.1.jar,一个MultiRequest分析工具,用于上传附件;commons-logging-1.0.2.jar,日志工具包,提供了一个统一输出日志的接口;commons-pool-1.3.jar,一个Java对象池工具包,dbtools.jar依赖于该jar;log4j-1.2.8.jar,日志输出工具包;dbtools.jar,提供一个基于JDBC的数据库工具包,其中还包含了进行JavaWeb应用开发的一些常用工具另外,所需要的servlet.jar包不需要放到WEB-INF/lib目录中,但这是servlet类编译所必须的。设计系统架构系统没有使用MVC三层架构形式,但是还是尽量少的在JSP页面上写Java代码,界面显示以外的所有java代码都封装在JavaBean或者Servlet里,系统结构如图所示:用户用户界面(JSP)系统业务逻辑(JavaBean)数据持久化(Acess数据库)函数调用函数调用用户界面是系统功能调用的入口,JavaBean提供全部的业务功能调用,JavaBean通过JDBC与数据库交互数据。系统启动与加载在WEB-INF/web.xml中增加一个Servlet,设置该Servlet的启动属性load-on-starup为0。该Servlet为JspMailAppInitServlet,该类用于初始化或释放应用的一些全局资源,在JSP容器部署应用的时候首先初始化该Servlet,在卸载应用的时候最后销毁该Servlet。在init()方法里加入初始化日志工具、数据库连接池等资源的代码。在destroy()方法加入销毁数据库连接池、日志工具等资源的代码。在系统启动时会自动调用下面的函数:正如以上分析,Tool类的initApp()方法,设置系统日志级别为INFO,并读取web.xml中配置单附件保存的路径,并调用函数initConnectionPool()进行数据库连接的初始化。根据web.xml中配置的数据库连接的参数,建立与该数据库的连接池。这样在数据库操作时就可以直接使用该数据库连接了。主要类开发通过系统分析,客户端包括三个模块,由于功能不是很复杂,因此,每个模块可以用一个JavaBean类来实现。下面列出需要设计的类:UserManager,实现用户管理所有的功能;该类提供了对用户的各种操作函数,在JSP页面中调用该类的方法即可。成员方法如下:(1).修改用户:修改用户个人信息时调用,更新数据库表中的用户名、密码、服务器。(2).登录验证:当用户登录时进行验证,输入用户名,查询该用户的密码与给定的密码是否一样。(3).判断用户是否存:在用户进行注册或修改用户名时,用户名是唯一的,需要判断用户名是否存在。(4).添加用户:当新用户注册时调用该函数,根据用户输入的用户名、密码、服务器选择增加一个新用户。(5).取得用户信息:当修改个人信息时,调用该函数取得该用户的信息显示在修改的表单中。DomainManager,实现服务器管理的所有功能;该类提供了对服务器设置的各种操作函数,在JSP页面中调用该类的方法即可。成员方法如下:(1).添加服务器设置:调用该函数增加一个新的服务器配置,包括该服务器配置的地、用户名、密码、POP3地址、SMTP地址。每一个用户都与该表的数据相关联,使用这里的配置进行的收取和发送。(2).修改服务器设置:修改已有的服务器配置项,包括该品味izhid用户名、密码、POP3地址、SMTP地址。(3).取得一个服务器配置:在修改服务器配置时,调用该函数取得当前修改的数据记录的值,显示在修改表单中。(4).取得所用的服务器配置列表:在用户修改个人信息时,需要从所有的服务器配置中选择一个来作为发送和接收的配置选项。这里查询服务器配置表中当前用户添加的所有配置列表。MailManager,实现管理的所有功能;该类提供了对的各种操作函数,在JSP页面中调用该类的方法即可。成员方法有以下三类:保存(1).保存到数据库:该函数在发送新时使用,用来将一个包寻到数据库中。Mail对象表示的是新建时输入的数据对象,该对象表示一封待发。Message表示一封实际发送的对象,isReceive表示当期保存的是发送出去的,还是从服务器接收到的。上面的代码中,首先组织对象Mail的数据容,然后组合一个SQL语句。如果不存在,则使用Insert语句,如果存在则使用Update语句。最后执行该SQL语句。并根据isReceive的值,判断此时是否应该将该保存到本地。(2).保存到附件目录:该函数在接收到本地时使用,它将远程服务器上的保存到本地的目录attachments中。该函数首先会在本地建立一个eml的文件,目录为web.xml中配置的附件目录。然后建立输出流对象,将该对象Message保存到该文件中。(3).检查是否存在:在新建时调用了该函数,用以检查数据库中是否已经存在了该。它查询数据表,关键字ID。(4).删除:根据ID删除数据库中的一条记录,并删除目录中对应的文件。阅读(1).阅读:该函数在读取时调用,根据的ID从数据表中读取的容,并返回Mail对象。(2).获取列表:根据的类型type取得列表。在数据表中,类型0表示接收的,1表示发送的,2表达式草稿。这里查询数据表中对应类型的,查询时制定所属的服务器配置ID、用户ID。并按照时间倒序排列。(3).获取收件箱、发件箱、草稿箱列表,调用上面的函数,分别传递参数为0、1、2即可。(4).读取附件:根据的ID和附件的名称,返回附件读取的输入流对象。它首先建立于目录中该文件的,然后调用MimeMsgParser类返回与该中附件的。发送(1).发送:该函数用于将本地编写的发送给接收人,使用该用户的发送服务器配置进行发送。首先根据该用户的配置参数,设置发送的SMTP地址、是否验证、验证的用户名,然后调用Transport的发送函数发送该。(2).发送:该函数与上面的函数不同的是,它是将当前用户编写的对象Mail转换为发送的对象Message,调用上面的函数将该对象发送出去。并设置数据库中该偶就的类型为已发送状态。MailReciver,从服务器上接收新保存到数据库,并把元件存成*.eml文件;该类提供了接收和保存到数据库的函数。(1).接收。(2).保存到数据库。MimeMsgParser,调用JavaMailAPI分析,获取包含的信息;该类提供了对对象的各种操作函数,在JSP页面中调用该类的方法即可。成员方法如下:(1)获取发件人的地址和。(2).获得的收件人、抄送和密送的地址和。(3).获取正文,把得到的容保存到一个StringBufer对象中,解析。主要是根据MimeType类型的不同执行不同的操作,一步一步地解析。(4).判断此是否需要回执,如果需要回执返回true,否则返回false。(5).判断此是否已读,如果未读返回false,反之返回true。(6).判断此是否包含附件。(7).保存附件:根据附件的类型,将附件容保存到附件目录中。Tool,静态功能函数的集合;该类提供一些实现相对独立功能的共有静态函数,方便在JSP页面、Servlet里调用。不如实现初始化应用、用户登录等功能的方法。(1).用户登录:验证用户登录,并在session中保存用户信息。ComposeMailServlet,保存、发送新的Servlet,具有处理多附件的能力;(1).处理多附件:此函数可以处理带多个附件的。(2).处理附件:此函数主要是对附件的出来,如:附件名、存储等。DownloadAttachmentServlet,下载附件的Servlet;此类主要用于下载附件。JspMailAppInitServlet,初始化系统应用的Servlet,在JSP容器装在系统应用的时候装在并调用该Servlet的init方法,在JSP容器卸载系统应用的时候调用该Servlet的destroy方法;User,Domain,Mail三个类是分别相应于user,domain,mail三个表的值的对象;这三个类主要是对相应表的描述,包括其属性和setter/getter方法,在这里就不在赘述了。五.用户界面开发。在客户端应用中,由于所有功能实现都在JavaBean里完成,所以JSP页面只是功能调用的入口,负责数据的收集与显示数据,相对比较简单。其关键是要正确地进行相关功能方法的调用与处理方法返回的结果。包括以下JSP页面:(1).用户注册页面register.jsp,调用UserManager的addUser方法注册用户。该页面中填写登录用户ID、、密码即可进行注册。其代码如下:(2).登录与退出login.jsp,登录时掉哦那个Tool类的loginUser静态方法验证用户的登录信息,并通过返回值判断是否登录成功。根据loginUser的返回值,给出不同的提示信息。当登录系统后,单击右上角的“退出”时,删除该用户的Session登录信息,跳转到登录页面。(3).修改个人信息modify_user_info.jsp,调用UserManager的modifyUser来保存修改后的用户信息。该页面的主要代码如下:(4).添加服务器add_server_setting.jsp,该页面调用DomainManager类的addDomain方法保存服务器配置数据。该页面的主要代码如下:(5).修改或删除服务器设置modify_server_setting.jsp,该页面调用DomainManager的modifyDomain来保存修改后的配置数据。该页面的主要代码是:(6).收取页面receive_mail.jsp,它使用了接收类MailReceiver的receiveMail来接收默认服务器上的收件箱的。首先,根据用户的D omain配置,设置接收的POP3地址、用户名和密码,然后打开收件箱的文件夹,取得列表。调用saveMail2DB()函数将保存到本地。其次,saveMail2DB方法负责将服务器地址中的某一封保存到本地的数据库,并将文件下载到本地。它根据对象Message来创建本地的对象Mail,最后调用MailManager的saveMail方法来执行保存。(具体代码请参看主要类设计步骤)(7).收件箱list_mail.jsp,该页面允许用户删除选择的,在列表上单击某

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论