资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,用,Java,语言实现简单邮件系统,实训作品原理及功能说明,项目目标,掌握邮件系统开发技术,包括邮件协议,,JavaMail,及邮件开发环境配置,邮件收发流程及,JavaMail,核心类的使用,利用,JavaMail,开发一个具体的邮件管理系统。,邮件系统介绍,在网上怎样收发邮件?,答:在网络上收发邮件各需要一个协议来完成,这一点不同于现实世界的邮件处理过程。,常用的邮件协议是哪些?,答:它们是,pop3,协议,负责收取邮件;,smtp,协议,负责发送邮件。二者各司其职,但是一个完整的邮件系统必须拥有这两种协议才能完成邮件收发工作。,两种查收邮件的方式,一、在线查收,比如,hotmail,。此时只需要登陆服务器收发信件就可以了,用户不必理会,pop3,和,smtp,服务器的设置,因为它们是自动在幕后工作的,点击,“,发送,”,,,smtp,就在工作了。,两种查收邮件的方式,二、离线查收,比如,Outlook,或者,Foxmail,。此类软件的好处是可以把信件收到本地的硬盘上。但是在创建新账号的过程中就必须按提示正确填写你的信箱地址、密码、,pop3,服务器地址、,smtp,服务器地址,这样才能实现不登陆信箱也能收发信件。,市场上的几种邮件系统性能比较,大型门户网站的邮件系统,目前大型门户网站的邮件系统通常是由内部人员自行开发的,需要十几个高级技术人员专门维护,并依赖于昂贵的硬件支持。,Etang,的邮件系统采用了价格为,100,万美元的,EMC,存储设备,263,的邮件系统成本在,1500,万人民币,有,30,人负责维护,新浪的邮件系统有,60,台的服务器支撑,还有十几位工程师在专门维护该系统,结论:这样的成本令众多企业在开展邮件服务时望而生畏。,Exchange Server,该系统只能运行在,Windows NT,上,而,WinNT,本身的不可靠、不稳定决定了,Exchange Server,的不稳定、不可靠。,Exchange Server,具有严重的内存泄漏问题,随着系统运行时间的增加会越来越慢,平均至少要一周重启一次。,Windows NT,系统面临着巨大的病毒感染隐患,一旦,Exchange Server,感染病毒,会造成,Exchange Server,本身的瘫痪,感染速度惊人。杀毒软件只会,“,亡羊补牢,”,。,Exchange Server,对邮件账户的支持是非常有限的,一般超过,200,个用户是系统就会效率低下,提升性能只能依靠昂贵的硬件。,Exchange Server,自身安全防范较弱,容易被外界利用来转发邮件,甚至冒充内部人员发送垃圾邮件。,Exchange Server,维护困难,拥有成本高,每个用户需交纳,10,美元许可费。,Lotus Notes,Lotus Notes,基本上还是一套,OA,和工作流系统,其邮件功能十分有限。国内用户反映的问题主要有:,邮件系统经常不能正常收发,需频繁的重启动服务器或清理邮件系统。,经常被外界利用来转发邮件,不能和部分邮件系统很好兼容,系统收到的,263,和,163,信箱的邮件显示为乱码,收不到,hotmail,的邮件。,OA,功能丰富,但是邮件系统不够可靠,效率低,超过,300,人时,收信速度明显变慢,拥有成本高,每个用户的成本是,21,美元,比,Exchange Server,还贵。,我的,JavaMail,系统,自己开发系统的最大好处是:按需定制,怎么简单怎么来!,资源开销小,维护成本低,功能灵活,有问题不用咨询工程师,毁掉重做就好。,拥有成本低到只有时间成本。,界面简单,清晰明了。,使用邮件协议的优点和不足,邮局协议的最大好处在于支持移动计算。由于用户的信件是存放在,POP,服务器中而不是直接自动存放到用户的计算机中的,这样用户就不必建立与,“,邮局,”,的永久性连接,以等待随时可能寄来的电子邮件,这使得那些不易于直接连入局域网络的台式,PC,或笔记本机可以通过拨号上网(建立临时的,TCP,IP,连接)的方式方便地获得邮件服务。这也是目前分散的互联网用户获得邮件服务的主要形式。,离线收发邮件的不足之处在于容易受到垃圾邮件的骚扰。而,www,邮局则较好地解决了此问题,因为服务器已经自动拦截了相当数量的垃圾邮件。,怎样用,J2SE,实现邮件系统,Java,提供了相应的程序接口,JavaMail,是相应的邮件功能实现接口,通过此接口,应用程序可以在黑盒状态下实现与邮件协议的通信,完成邮件收发。实现机制类似于数据库桥接程序原理。,本项目中邮件收发实现过程,使用,JavaMail,接收邮件的基本系统流程,1,、使用,session,建立会话,2,、使用,store,建立连接,3,、使用,folder,与制定文件夹建立连接,4,、使用,message,等类处理邮件,本项目中邮件收发实现过程,使用,JavaMail,发送邮件的基本系统流程,1,、使用,session,建立会话,2,、使用,transport,建立通信对象,3,、使用,message,构建邮件,4,、使用,transport,发送邮件,本系统组建思路,因为实际上我们的目标系统就是邮件服务器的客户端,所以他的基本功能得以确定:,1,、,实现,pop3,邮件服务器的收取与显示,2,、,使用,smtp,邮件服务器发送邮件,3,、,实现文本邮件与多附件的发送与接受,4,、,实现邮件的删除功能,仿照,MS,Outlook Express,功能实现,系统界面管理,系统主界面,写邮件、收邮件、删除邮件、服务器参数预置、邮件列表、邮件显示窗口。,新建和发送邮件界面,服务器参数设定界面,pop3,和,smtp,服务器参数设定。,收取附件界面,附件列表、保存功能。,重点功能的实现技术,JavaMail,API,如何支持邮件系统开发?,发送邮件的类和方法,Properties,JavaMail,需要,Properties,来创建一个,Session,对象,它将寻找字符串,“,mail.smtp.host,”,属性值就是发送邮件的主机。比如:,Properties props=new Properties();,Props.put(,“,mail.smtp.host,”,”,”,);,Session,Session,类代表,JavaMail,中的一个邮件,Session,。每一个基于,Javamail,的应用程序至少有一个,Session,,但是可以有任意多的,Session,。,Session,对象需要知道用来处理邮件的,smtp,服务器。例程:,Session,sendMialSession,;,sendMailSession,=,Session.getInstance(props,null,);,Session,类定义了基本的邮件会话。就像,Http,会话那样,我们进行收发邮件的工作都是基于这个会话的。,Session,对象利用了,java.util.Properties,对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。,Transport,JavaMail,使用了两个不同的类来完成这两个功能:,Transport,和,Store,。,Transport,是用来发送信息的,而,Store,用来收信。使用,Transport,的方法:,Tranport,transport;,transport=,sendMailSession.getTransport(,“,smtp,”,);,用,JavaMail,Session,的对象的,getTransport,方法来初始化,Transport,。传过去的字符串申明了对象所要使用的协议,“,smtp,”,这极大的节省了我们的时间。,JavaMail,已经内置了很多协议的实现方法。,Authenticator,Authenticator,像,类那样,,JavaMail,API,通过使用授权者类(,Authenticator,)以用户名、密码的方式访问那些受到保护的资源,在这里,“,资源,”,就是指邮件服务器。在,javax.mail,包中可以找到这个,JavaMail,的授权者类(,Authenticator,)。在使用,Authenticator,这个抽象类时,我们必须继承该抽象类,并且该继承类必须具有返回,PasswordAuthentication,对象(用于存储认证时要用到的用户名、密码),getPasswordAuthentication,(),方法。并且要在,Session,中进行注册,使,Session,能够了解在认证时该使用哪个类。,Message,Message,对象存储我们实际发送的电子邮件信息,,Message,对象被作为一个,MimeMessage,对象来创建并且需要知道应当选择哪一个,JavaMail,Session,。,使用方法:,Message,newMessage,=new,MimeMesage(sendMailSession,);,接收邮件的类和方法,Store,建立,Session,对象后,就需要使用,Store,类建立,与,POP,或者,IMAP,服务器的通信连接,例程:,Store,store,=session.getStore(,“,pop3,”,);,Store.connect(host,username,pwd,);,Store,是抽象类,它模拟了消息存储器及其内部目录(,Folder,)访问协议,以存储和读取消息,由其子类提供具体实现。客户程序可以通过获取一个,Store,对象来访问消息存储器,以绝大多数的存储器要求用户在访问前提供认证信息,,connect,方法执行了该认证过程。与,Transport,类似,也可以指定,Store,使用协议。邮件是读取邮件所以用,pop3,协议来读取。如:,Store,store,=new Store(,“,pop3,”,);,然后认证,:,store.connect(host,username,pwd,),Folder,使用,Folder,类与指定的文件夹相连,例程:,Folder,folder,=,store.getFolder(,“,INBOX,”,);,foler.open(Folder.READ_ONLY,);,Message,message,=,folder.getMessage,();,folder.close(true,);,对本地邮件进行处理,先来了解一下每封邮件的构成:,邮件标题,邮件体,通常是,multipart,类型,正文,可能是文本,可能是网页,附件,多种类型的格式,正因为邮件格式多数情况下为嵌套类型,面对单一协议的非智能处理,可行的办法就是采用循环(递归)作业方式对每一部分邮件内容进行比对索取,完成邮件解释。,
展开阅读全文