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