SlideShare a Scribd company logo
1 of 33
基于 JavaMail 邮件系统的设计与实现


                     摘    要
  本论文阐述了 Web 邮件系统所涉及的几个重要协议,对 JavaMail API 核心类进行了介
绍,并给出了其中发送邮件功能的详细设计过程。JavaMail 结合 JSP 的结构化特性,易于实
现灵活高效、方便移植的 Web 邮件应用程序。




关键词:文本邮件;HTML 邮件;带附件邮件;JavaMail
Design and Implementation of Mail System Based on
                               JavaMail


                                            Abstract
     This paper first expatiated on some protocols come down to the Web mail system , and then
introduced the architecture and core classes of JavaMail API. After that , the articlepresented the
system framework and the detailed design process of mail sending. In conclusion , it can easily
implement flexible , high effective and transplantable Web mail applications with JavaMail and
structured JSP.




          Keywords:text mail;html mail;attachment mail;javamail
目              录

第一章 引(前)                         言................................................................................................................. 6

      1.1 研究意义 ........................................................................................................................... 6

      1.2 研究现状 ........................................................................................................................... 7

第二章 相关邮件协议和 JavaMail API ........................................................................................ 7

      2.1 相关邮件协议 ................................................................................................................... 7

      2.2 JavaMail API..................................................................................................................... 8

             2.2.1 JavaMail API 简介 ................................................................................................ 8

             2.2.2 JavaMail API 核心类 ............................................................................................ 8

第三章 应用系统开发工具 ............................................................................................................. 9

      3.1 开发语言简介 ................................................................................................................... 9

             3.1.1 Java 语言简介 ....................................................................................................... 9

             3.1.2 Jsp 语言简介 ....................................................................................................... 10

      3.2 开发工具 ......................................................................................................................... 11

             3.2.1 Eclipse .................................................................................................................. 11

             3.2.2 Tomcat ................................................................................................................. 12

      3.3 开发软件的安装 ............................................................................................................. 12

             3.3.1JAVA 环境的安装与配置 ..................................................................................... 12

             3.3.2Eclipse 的安装 ...................................................................................................... 13

             3.3.3Tomcat 的安装 ..................................................................................................... 14
第四章 JavaMail 系统的实现 ...................................................................................................... 14

       4.1 邮件发送功能-初步探索 ................................................................................................. 14

              4.1.1 邮件发送过程总览 ............................................................................................... 14

              4.1.2 文本邮件发送 ....................................................................................................... 15

              4.1.3 Html 邮件发送 ..................................................................................................... 18

       4.2 邮件发送功能的深入研究-带附件的邮件发送 ............................................................. 20

       4.3 文本邮件和 Html 邮件的接收功能的实现 .................................................................... 22

       4.4 邮件发送系统的整合 ..................................................................................................... 24

第五章 结语................................................................................................................................... 31
基于 JavaMail 邮件系统的设计与实现


                  第一章 引(前)    言

  本文是一项基于 JavaMail 的邮件系统的综合性研究,使用 Sun 公司提供的

JavaMail API 实现电子邮件的发送、电子邮件的接收等等功能。

  1.1 研究意义

  随着社会的发展,科技的进步,作为信息载体的计算机日益显露出其举足轻
重的地位。当今社会已步入了信息社会,知识经济将成为新世纪的主导产业。人
们传统的联系方式也在不断的被改变。伴随着 Internet 的发展,电子邮件以其使
用简易、投递迅速、收费低廉,易于保存、全球畅通无阻等等优点被广泛地应用,
它使人们的交流方式得到了极大的改变。电子邮件已是人们沟通、交流的重要工
具。
  由于 E-mail 是当今人们交流的重要工具之一,因而,对 E-mail 系统的研究
也逐渐变的热起来。基于 JavaMail 邮件系统具有快捷、方便的优点,吸引了众
多的网络用户,使其成为 E-mail 研究方向的热点之一。
  最初人们在使用 E-mail 服务时,必须使用邮件客服端,如:Outlook、Foxmail
等软件,去接收邮件服务器上的邮件。由于操作系统的不同,往往需要不同的邮
件接收客户端,给人们接收邮件带来很大的不便。但是基于 JavaMail 的邮件系
统只要一个网络浏览器就可以实现 E-mail 的日常收发功能,而网络浏览器是任
何操作系统中都自带的软件,用户在世界任何一个角落任何一台计算机都可以进
行 E-mail 的收发工作。
  此外,由于最初用户接收邮件的设置信息均保存在客服端,当用户重新安装
操作系统或者更换计算机还要重新设置,而基于 JavaMail 的 Web 邮件系统的设
置保存在邮件服务器上,不论你更换电脑还是系统,收发邮件的方式都是按照以
前的设置进行的,使邮件的收发更合你的口味。
  基于 JavaMail 的邮件系统让你不在为机器配置担忧,而且还为用户的邮件
安全分担忧愁。
  由于最初需要使用客服端软件收发软件,硬件配置低的计算机就显得“爱莫
能助”了。虽然计算机的发展使得硬件问题不在是个问题,但是不强调硬件的配
置也是基于 JavaMail 邮件系统的一个优点之一。此外,由于客户端软件维护和
升级困难,网络浏览器的更新速度要远远大于邮件客户端软件的更新速度,这就
给用户一个更安全的环境。
日前,基于 JavaMail 邮件系统的发展越来越成熟。多线程的设计方法,大
大的提高了系统的通信效率和成本;采用 MVC 设计模式的邮件系统还大大的减
少了系统的维护量。
  当然,基于 JavaMail 的邮件系统缺乏对动态页面的支持能力,没有集成有
效地数据库处理功能,也存在系统扩展性差、数据处理速度稍慢等缺点。但是,
这些问题已经有了很好的起步,将不再是大的问题。
  总之,计算机的广泛应用,Internet 的不断发展,E-mail 在日常通讯中的地
位越来越重要。虽然传统的 C/S 模式的邮件系统仍占有重要地位,但基于 JavaMail
的 Web 邮件系统会以其快捷、方便的等等优点为越来越多的人所接收,广泛的
应用到各个领域,成为一名后起之秀。



  1.2 研究现状

  E-mail 是信息化时代最重要的联系工具之一,在日常的工作学习中具有非常
重要作用。
  对 E-mail 的研究也层出不穷,基于 JavaMail 邮件系统的设计与实现大多数
都是研究和使用 Sun 公司提供的 JavaMail API 去实现其邮件发送和接收功能。为
了便于代码维护,使用 JSP 和 Servelet 方式实现 JavaMail 邮件系统;为了提高系
统的效率和通信成本,又加入了多线程技术等等。



           第二章 相关邮件协议和 JavaMail API

  2.1 相关邮件协议

  邮件的传送要依赖于具体的传输协议,主要有:SMTP、POP3、IMAP、MIME。
  (1)SMTP:简单邮件传输协议,该协议定义了发送电子邮件的规范。邮
件发送过程中,在 SMTP 基础上的发送邮件的应用程序与网络中的电子邮件服
务器交换数据信息,最终把邮件传送至目录服务器。
  (2)POP:邮局协议,当前的版本为 3,也称作 POP3。POP 是 Internet 上
的大多数人用来接收邮件的机制。它为每个用户的每个邮箱定义支持,这是它所
做的全部工作,也是大多数问题的根源。如果要从邮件服务器中查询特定帐户的
邮件并下载到本地,就可以使用基于 POP3 协议的应用程序。
  (3)IMAP:用于接收消息的更加高级的协议,它是在 RFC2060 中定义的。
IMAP 的含义是"Internet 消息访问协议",当前版本是第 4 版,也称作 IMAP4。
使用 IMAP 时,邮件服务器必须支持该协议。不能只是简单地把程序转变为支
持 IMAP,而不是支持 POP,就指望能支持 IMAP 中的一切。假定您的邮件服务
器支持 IMAP,那么基于 JavaMail 的程序就可利用在服务器上拥有多个文件夹
的用户,并且这些文件夹可以被多个用户共享的功能。
   4)MIME:是"多用途的网际邮件扩充协议"。它不是一种邮件传输协议,相
反,它定义传输的内容:消息的格式、附件等。许多文档都定义了 MIME 协议,
包含:RFC 822、RFC 2045、RFC2046 和 RFC 2047。作为 JavaMail API 的用户,
一般不需要担心这些格式。但是,这些格式确实存在,并为您的程序所用。


  2.2 JavaMail API

     2.2.1 JavaMail API 简介

   JavaMail API 是 SUN 为 Java 开发者提供对电子邮件处理的延伸,能用于读
取、编写和发送电子消息的包(标准扩展)。为管理电子邮件提供了统一的应用
编程接口,它可以处理各种 e-mail 格式(包括 IMAP、POP、SMTP 以及 MIME)
和其他 Internet 相关的讯息通信协定。
   用户可使用这种包创建邮件用户代理(Mail User Agent,MUA)类型的程序,
它类似于 Foxmail、Eudora 以及 Miceosoft Outlook 这些邮件程序。其主要目的不
是像发送邮件或其他邮件传输代理(Mail Transfer Agent,MTA)类型的程序那
样用于传输、发送和转发消息。换句话说,用户可以与 MUA 类型的程序交互,
以阅读和撰写电子邮件。MUA 依靠 MTA 处理实际的发送任务。



     2.2.2 JavaMail API 核心类

   Session:Session 类定义了一个基本邮件会话(session),是 JavaMail API 最
高层入口类。所有其他类都是经由这个 Session 才得以生效。Session 对象用
java.util.Properties 对象获取信息,如邮件服务器、用户名、密码及整个应用程序
中共享的其他信息。
   Message :一旦获得 Session 对象,就可以继续创建要发送的消息。这由
Message 类来完成。因为 Message 是个抽象类,必需由一个子类来实现其具体功
能, 多数情况下为 javax.mail.internet.MimeMessage。MimeMessage 是个能识别
MIME 类型和头的电子邮件消息,正如不同 RFC 中所定义的。虽然在某些头部
或非 ASCII 字符也能被译码,但 Message 头只能被限制为用 US-ASCII 字符。
   Address:一旦创建了 Session 和 Message,并将内容填入消息后,就可以用
Address 确定信件地址了。和 Message 一样,Address 也是个抽象类。用户使用的
是 javax.mail.internet.InternetAddress 类,它是 Address 的一个子类。
    Authenticator: JavaMail API 也可以利用 Authenticator 通过用户名和密码访
问受保护的资源。对于 JavaMail API 来说,这些资源就是邮件服务器。JavaMail
Authenticator 在 javax.mail 包中,要使用 Authenticator,先创建一个抽象类的子
类,并从 getPasswordAuthentication()方法中返回 PassaordAuthentication 实例。创
建完成后,必须向 Session 注册 Authenticator。然后,在需要认证的时候,就会
通知 Authenticator。
    Transport:消息发送的最后一部分是使用 Transport 类。这个类用协议指定
的语言发送消息(通常是 SMTP)
                。它是抽象类,它的工作方式与 Session 有些类
似。仅调用静态 send()方法,就能使用类的缺省版本:Transport.send(message)发
送消息,然后关闭连接。
    Store :Store 类实现特定邮件协议上的读、写、监视、查找等操作。通过
javax.mail.Store 类可以访问 javax.mail.Folder 类。
    Folder:Folder 类用于分级组织邮件,并提供照 javax.mail.Message 格式访问
e-mail 的能力。



                     第三章 应用系统开发工具
    本次程序设计所采用的工作环境为 JAVA+JSP+Eclipse3.2。下面将分别介绍
这两个环境。


   3.1 开发语言简介

       3.1.1 Java 语言简介

    Java[2]是 SUN 公司推出的新一代面向对象的程序设计语言,它是一种简单
的面向对象的分布式可移植性能优异的多线程的动态语言。它具有以下的特点:
    (1)简单
    Java 最初是为了对家用电器进行智能化控制而设计的一种语言,因此它特别
的简单明了。它的简单性体现在以下三个方面。
    ①Java 的编程风格类似于 C++的风格,因此大家都比较熟悉。
    ②Java 中没有 C++中的指针和内存管理的概念,可以避免犯 C++中的常见错
误。
    ③ Java 中有丰富的类库,大大方便了编程工作。
     在
    (2)面向对象的特性
面向对象性可以说是 Java 最重要的特性。Java 语言的设计完全是面向对象
的,它不支持类似于 C 语言那样的面向过程的程序设计技术。Java 支持静态和
动态风格的代码继承及重用。
   (3)分布性
   Java 有很强的网络特性。通过它特有的类,可以方便地处理 TCP/IP 协议和
访问网络资源。它的分布计算的特性正是它得以在网络时代风靡的重要原因。
   (4)鲁棒性
   Java 中对应不同的类具有的 Exception,正是这些不同的 Exception 可以防止
因为程序员的错误而造成系统的崩溃。
   (5)安全性
   Java 不支持指针,因此一切对内存的访问都必须通过对象的实例变量来进
行,因此可以有效的防范病毒的入侵。
   (6)体系结构中立
   Java 的解释器可以生成与系统体系结构无关的字节码指令,一个系统只要安
装了 Java 虚拟机就可以执行 Java 程序了。
   (7)多线程性
   Java 的多线程能够保证程序的并行执行。而且同步机制保证了对共享数据的
正确操作,方便用户在网络上的实时交互操作,提高系统的处理能力。
   (8)动态性
   Java 的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的
方法和实例变量而不会影响用户程序的执行,并且 Java 通过接口来支持多重继
承,使之比严格的继承类具有更灵活的方式和扩展性。同时用户也可以创建自己
的特有的类,以方便操作和提高编程能力。


      3.1.2 Jsp 语言简介

   JSP(JavaServer Pages)是由 Sun Microsystems 公司倡导、许多公司参与一起建
立的一种动态网页技术标准。JSP 技术有点类似 ASP 技术,它是在传统的网页
HTML 文件(*.htm,*.html)中插入 Java 程序段(Scriptlet)和 JSP 标记(tag),从而形
成 JSP 文件(*.jsp)。
   用 JSP 开发的 Web 应用是跨平台的,即能在 Linux 下运行,也能在其他操
作系统上运行。
   JSP 技术使用 Java 编程语言编写类 XML 的 tags 和 scriptlets,来封装产生动
态网页的处理逻辑。网页还能通过 tags 和 scriptlets 访问存在于服务端的资源的
应用逻辑。JSP 将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设
计,使基于 Web 的应用程序的开发变得迅速和容易。
   JSP 页面由 HTML 代码和嵌入其中的 Java 代码所组成。服务器在页面被客
户端请求以后对这些 Java 代码进行处理,然后将生成的 HTML 页面返回给客户
端的浏览器。Java Servlet 是 JSP 的技术基础,而且大型的 Web 应用程序的开发
需要 Java Servlet 和 JSP 配合才能完成。JSP 具备了 Java 技术的简单易用,完全
的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点
   Web 服务器在遇到访问 JSP 网页的请求时,首先执行其中的程序段,然后将
执行结果连同 JSP 文件中的 HTML 代码一起返回给客户。插入的 Java 程序段可
以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。



   3.2 开发工具

      3.2.1 Eclipse

   Eclipse:Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就
其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸
运 的 是 , Eclipse 附 带 了 一 个 标 准 的 插 件 集 , 包 括 Java 开 发 工 具 ( Java
Development Tools,JDT) Eclipse 还包括插件开发环境(Plug-in Development
                      。
Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因
为它允许他们构建与 Eclipse 环境无缝集成的工具。
   Eclipse 是一种通用工具平台——普遍适用的开放式扩展 IDE,它提供了功
能丰富的开发环境,允许开发者高效地创建一些能够无缝集成到 Eclipse 平台中
的工具。Eclipse 的体系结构为: 底层为 JAVA 开发环境插件(JDT),插件开发环
境(PDE),其他的第三方插件。中层为 Eclipse 的图形界面(包括——工作台,
Jface,SWT),核心为工作空间(workspace)和运行时内核(runtime)。
   Eclipse 的设计思想是:一切皆为插件。Eclipse 的核心是非常小的,其他所
有的功能都是以插件的形式附加到这个 Eclipse 核心之上。这样的功能插件包括
他的图形 API
       (称为 SWT/JFace)JAVA 开发环境插件
                    、           (JDT)插件开发环境
                                     、     (PDE)
等。Eclipse 还对这些插件的协同工作提供了良好的支持,不仅安装简单,而且
还可以无缝结合。
   Eclipse 对这些插件是动态载入动态调用的。所谓动态就是指,Eclipse 启动
后要真正用到这个插件时,它才会被调入内存,当插件不再被使用时,它就会被
在适当的时候清除出去。因此即使装了一大堆插件在 Eclipse 里,也不必担心某
些不常用的插件白白占着内存。
3.2.2 Tomcat

   Tomcat:Tomcat 是 Apache 软件基金会(Apache Software Foundation)的
Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开
发而成。由于有了 Sun 的参与和支持,最新的 Servlet 和 JSP 规范总是能在
Tomcat 中得到体现,Tomcat 5 支持最新的 Servlet 2.4 和 JSP 2.0 规范。因为
Tomcat 技术先进、性能稳定,而且免费,因而深受 Java 爱好者的喜爱并得到了
部分软件开发商的认可,成为目前比较流行的 Web 应用服务器。
   Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不
是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。对于一个初学者
来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应对
HTML 页面的访问请求。实际上 Tomcat 部分是 Apache 服务器的扩展,但它是
独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进
程单独运行的。
   此外,我们还需要两个 Jar 包,一个是 mail.jar,另一个是 activation.jar。这
两个 Jar 包放在 JavaMail/WEB-INF/lib 下。


   3.3 开发软件的安装

      3.3.1JAVA 环境的安装与配置

   在安装 Eclipse 之前,需要先安装 JDK(Java Development Kits)。
   在 JDK 安装完成之后,一般需要设置计算机系统的环境变量,以便于其它
软件确定 JDK 的安装位置。在 WindowsXP 操作系统环境,具体操作步骤如下:
   1.选择“开始”菜单中的“控制面板”命令,打开控制面板窗口,双击选择“系
统”,打开如图 1 所示的“系统属性”对话框。
   2.单击“系统属性”对话框中的“环境变量”按钮,进入图 2 所示的“环境变量”
对话框。在该对话框中可以设置只有当前用户登录时才有效的用户变量,也可以
设置该系统的所有用户登录时都有效的系统变量。
   3.在“环境变量”对话框中单击“新建”按钮,在打开图 3 所示的新建系统变量
对话框输入变量名为 JAVA_HOME,其环境变量的值应该设置为 JDK 的安装位
置。
   4.然后在如图 3 所示的“环境变量”对话框中再次选择 Path 环境变量,将
F:Program FilesJavajdk1.5.0_09bin 添加到对应的变量值后面,注意和前面的值
用“;”隔开。单击“确定”按钮即可完成 JDK 相关环境变量的设置。
图 1:系统属性对话框




                        图 2:环境变量对话框




                   图 3:新建系统变量对话框

     3.3.2Eclipse 的安装

  Eclipse 是开放源代码的项目,可以到 www.eclipse.org 去免费下载 Eclipse 的
最新版本。其中可以选择下载 Eclipse SDK,它包括了 Eclipse 开发环境、Java 开
发环境、Plug-in 开发环境以及所有源代码和文档。
    Eclipse 在 下 载 完 成 后 , 只 需 要 将 对 应 的 压 缩 包 文 件 eclipse –S
DK-3.1.1-win32.zip 解压缩到指定位置,即可完成安装。
    Eclipse 为中国用户提供了非常好的支持,通过安装 Eclipse 多国语言包,
Eclipse 可以自动实现开发环境的本地化,即自动根据操作系统的语言环境选择
语言包。
    到 www.eclipse.org 去免费下载对应 Eclipse 3.1.1 版本的多国语言包,称为
Language Pack。下载完成后,可获得名称为 NLpack-eclipse-SDK-3. 1.1a-win32.zip
的压缩包,下面介绍具体的安装步骤:
    1.首先必须关闭 Eclipse,注意在安装 Eclipse 各个插件工具时都需要先关闭
Eclipse。
    2.对压缩包进行解压缩。
    3.在 Eclipse 安装目录下创建子目录 links,并在该目录中新建一个文本文件,
名称为 language.start,在文件中键入如下一行信息。
    Path= d:eclipselanguage


       3.3.3Tomcat 的安装

    Tomcat 是开放源代码的项目,可以到 www.apache.org 去免费下载 Tomcat 的
最新版本。下载 apache-tomcat-6.0.16.zip,然后解压缩到 C:javaTomcat 6.0 文件
夹中。
    从 Tomcat 4.0 开始,Tomcat 已经不依赖环境变量中的 CLASSPATH 了。但
是问了编写的 Java 程序可以顺利编译。
    Set catalina_home= C:javaTomcat 6.0
    Set classpath=.; C:javaTomcat 6.0libservlet-api.jar
    进入 C:javaTomcat 6.0bin 文件夹,双击 startup.bat,Tomcat 即可启动。



                        第四章 JavaMail 系统的实现

   4.1 邮件发送功能-初步探索

       4.1.1 邮件发送过程总览

    发送一封邮件,一般需要六个步骤:
    第一步:确定要发送的邮件服务器的地址。
    如:String mailserver = “smtp.163.com”
                                       ;
第二步:设置邮件的传输协议。
  如:Properties props = System.getProperties();
  props.put("mail.smtp.host",mailserver);
  第三步:建立邮件发送的连接。
  如:Session session = Session.getDefaultInstance(props,null);
  第四步:创建发送信息的载体。如:
  Message msg = new MimeMessage(session);
  第五步:设置相关的邮件属性,如主题、发件人、收件人、内容以及邮件发
送日期。
  如:msg.setFrom(new InternetAddress(from));//设置发信人地址
  msg.setRecipient(Message.RecipientType.TO,new InternetAddress(to)); //设置
收信人地址
  msg.setSubject(subject);//设置邮件主题
  msg.setSendDate(new Date());//设置发送日期
  msg.setText(content);//设置邮件内容
  第六步:发送邮件。
  如:Transport.send(msg);
  上述六个步骤适合任意类型的电子邮件的发送,也是电子邮件发送必须的步
骤,不同类型电子邮件的发送只是在个别部分的处理过程的不同。



     4.1.2 文本邮件发送

  发送文本邮件是 JavaMail 中最基本的操作。在这个程序中,用户可以在 Html
页面上输入要发送邮件的内容和地址,通过表单把邮件的内容提交给一个 JSP 页
面进行处理。为了测试方便,使用 James 服务器做为邮件服务器。



               simplemail.html              Sendsimplemail.jsp




  其用户窗口如下图(图 4):
图 4 文本邮件发送用户信息输入页面
  处理用户信息的 JSP 页面的主要代码如下:
      Properties props=new Properties();
      sendsession = Session.getInstance(props, null);

  定义一个Properties对象,获取系统属性并生成Session对象。

      props.put("mail.smtp.host", "localhost");
      props.put("mail.smtp.auth","true");

  向属性中写入 SMTP 服务器的地址,并设置 SMTP 服务器需要权限认证。
    Message message = new MimeMessage(sendsession);

  根据 Session 对象,生成一个 Message 对象。由于 Message 类为抽象类,因
此需用其子类 MimeMessage 类生成其实例。

  message.setFrom(new InternetAddress(request.getParameter("from")));
                 message.setRecipient(Message.RecipientType.TO,new
  InternetAddress(request.getParameter("to")));
               message.setSubject(new
  String(request.getParameter("subject").getBytes("ISO8859_1"),"GBK"));
                 message.setSentDate(new Date());
                 message.setText(new
  String(request.getParameter("text").getBytes("ISO8859_1"),"GBK"));
                 message.saveChanges();

  上述代码设置了邮件的具体信息,如:收件人地址、发件人地址、e-mail 标
题、邮件发送时间、邮件正文等并保存对于 email 的修改。



      Transport transport;
      transport=sendsession.getTransport("smtp");
      transport.connect("localhost","jinny","jinny");
      transport.sendMessage(message,message.getAllRecipients());
      transport.close();

  根据 Session 对象生成一个 Transport 对象,连接到邮件服务器。此时即可发
送 e-mail,在发送 e-mail 后关闭 transport 对象,则可以大大节约系统资源。
  点击发送邮件,此时结果如图:




                       图 5 点击发送文本邮件的页面
  若输出“e-mail 发送成功! 则说明邮件发送成功,否则邮件发送失败。
                  ,
                  ”
  使用 Foxmail 查看邮件,结果如图:
图 6 使用 Foxmail 查看文本邮件



     4.1.3 Html 邮件发送

   发送 Html 邮件跟发送 Text 邮件没有太大的不同,创建邮件的时候稍微有所
区别,其他各部分的操作都是相同。只需要调用 setContent()方法,把 content 设
置为:”text/html”。因此,我们在 Html 页面添加一个 select,当用户选择以 Html
格式发送时,type 就为 html,邮件将以 Html 格式发送。




            htmlmail.html   sendhtmlmail.jsp




   其登陆窗口和用户数据如下图(图):
图 7 HTML 邮件发送用户信息输入页面
   sendhtmlmail.jsp 主要代码如下:
   String type = request.getParameter("type");

   获取邮件发送的类型。

   message.setContent(text,type+";charset=GB2312");

   置邮件发送的类型,若 type 属性为“text/plain” 则邮件以文本格式发送。若
                                 ,
type 属性为“text/html” 则邮件以 HTML 格式发送。
                  ,


   点击发送邮件,此时结果如图:




                              图 8 HTML e-mail 的发送
这样,添加上述两行代码,HTML 邮件的发送过程就结束了。若输出“e-mail
发送成功! 则说明邮件发送成功,否则邮件发送失败。
     ,
     ”
    使用 Foxmail 查看邮件,结果如图:




                    图 9 使用 Foxmail 接受 HTML 邮件



   4.2 邮件发送功能的深入研究-带附件的邮件发送

    发送带附件的邮件最为复杂,它涉及很多方面的知识。在这里仍然采用 JSP
和 JavaBean 的方法实现带附件的邮件发送。
    此 外 , 要完 成 附件 上传 功 能 还必 须 添加 form 的 enctype 属 性 , 其 值
为”multipart/form-data”。
    其登陆窗口如下图(图):
图 10 带附件的邮件发送用户信息输入页面
   sendattachmail.jsp 的主要代码:
    BodyPart messageBodyPart=new MimeBodyPart();
              messageBodyPart.setText(new
    String(request.getParameter("text").getBytes("ISO8859_1"),"GBK"));

   生成一个 BodyPart 对象,由于 BodyPart 类是抽象类,故应由其子类
MimeBodyPart 类实例化对象。建立第一部分:文本正文。

           Multipart multipart = new MimeMultipart();
           multipart.addBodyPart(messageBodyPart);

   创建一个 Multipart 对象,因为 Multipart 对象也是抽象类,因此,也需要由
其子类 MimeMultipart 类生成子类。并且将第一部分的文本正文 messageBodyPart
对象添加进去。
          attachBodyPart=new MimeBodyPart();
          DataSource source=new FileDataSource(attachment);
          attachBodyPart.setDataHandler(new DataHandler(source));
          attachBodyPart.setFileName(attachment);
          multipart.addBodyPart(attachBodyPart);
          message.setContent(multipart);

   再生成一个 BodyPart 对象,用来处理附件。使用 setDataHandler()方法设置
附件的数据处理器,使用 setFileName()方法设置文件名,并将附件对象添加到
Multipart 对象中去。
   点击发送邮件,结果如图:
图 11 带附件邮件的发送页面
  使用 Foxmail 查看邮件,结果如图:




           图 12 使用 Foxmail 接收带附件邮件



 4.3 文本邮件和 Html 邮件的接收功能的实现

  在 JavaMail 中,接收文本邮件和 HTML 格式邮件的处理方法基本上是一致
的。在这个程序中, 首先,由用户输入邮件服务器,由用户给出邮箱的用户名
和密码,登陆邮件服务器查看邮件。
  此程序,仍然使用 HTMT 页面作为用户输入信息页面,之后采用 JSP 和
JavaBean 的方法显示用户邮箱中邮件的数目和查看单封邮件。
  其登陆窗口如下图(图):




                                图 13 登陆邮箱页面
  checklogin.jsp 的主要代码:


         Store store=recesession.getStore("pop3");
         String host=request.getParameter("host");
         String user=request.getParameter("user");
         String password=request.getParameter("password");
         store.connect(host,user,password);

  创建一个 Store 对象,并根据得到的三个参数连接到邮件服务器中的用户邮
箱。

         Folder inbox=store.getFolder("INBOX");
         inbox.open(Folder.READ_ONLY);

  打开收件箱,在此,设置为邮件只读。

     Message message=inbox.getMessage(i);
     String title=message.getSubject();
     ……

  使用 getMessage()方法获取单封信件,使用 getSubject()方法获取邮件的主题,
使用 getFrom()方法获取发件人等等。


     标题:<a href="messagedetail.jsp?

     msg=<%=i%>&host=<%=host%>&user=<%=user%>
     &password=<%=password%>"><%=title%></a>
  上段代码即可查看单封邮件,并传递一些参数信息。
点击进入邮箱,结果如图:




               图 14 用户邮箱邮件列表
  点击第一封邮件的标题,显示如图:




                  图 15 查看单封邮件



  4.4 邮件发送系统的整合

  由于以上各个程序只强调实现各自的主要功能,整合各个模块,就形成了基
于 JavaMail 邮件系统。在本系统中,采用 HTML 页面由用户输入数据,JSP 页
面用来调用 JavaBean 处理邮件信息,并向客服端输入发送结果。如果邮件处理
正确,则向客服端输出“邮件发送成功! 否则,输出“邮件发送失败” 由于代码
                  ”
                  ,            。
重复,在此只给出个各部分代码并作简单的功能介绍。



                                                                           sendmail.html



  loginmail.html             checkloginmail.jsp           listlogin.html   listfolder.jsp




                                                                           filtermail.jsp




            listfolder.jsp               detailmail.jsp




    其各部分代码如下:

    //loginmail.html
    <html>
    <head>

    <title>登陆邮件服务器</title>

    </head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <body bgcolor="#CFF1E1">
    <center><h2>

      登陆邮件服务器
    该段代码主要起到和用户进行交互的作用,用户输入必要的信息进入用户的
邮箱。
  </h2></center>
    <br>
    <form Name="receform" action="checklogin.jsp" method="post">
    <table width="70%" border="0" align="center">
      <tr>

        <td width="30%">邮件主机名:</td>

         <td width="70%" align="center">
             <input name="host">
         </td>
      </tr>
      <tr>

        <td width="30%">用户名:</td>
//checklogin.jsp
 <%@ page contentType="text/html;charset=GB2312"%>
 <%@ page import="javax.mail.*,java.util.*"%>
 <html>
 <head>

 <title>登陆邮件服务器验证</title>

 </head>
 <body bgcolor="#CFF1E1">
 <%
  try{

    //获得一个 session 对象,并设置其属性为 true

  Properties props=new Properties();
  此段代码检测用户在 loginmail.html 页面输入的信息是否正确,如果信息正
  Session recesession=Session.getInstance(props,null);
确,将转向用户操作页面(listlogin.html)
  recesession.setDebug(true);                ;如果不正确,提示用户输入数据不正
确并将转向用户登录页面(loginmail.html)。
  //创建一个 Store 对象,并根据得到的三个参数连接到邮件服务器中的用户邮
 //listlogin.html
 箱
 <html>
 <head> store=recesession.getStore("pop3");
      Store
     String host=request.getParameter("host");
 <title>提示登陆效果,并为用户提供操作选项</title>
     String user=request.getParameter("user");
 </head> password=request.getParameter("password");
     String
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
     store.connect("pop."+host,user,password);
 <body bgcolor="#CFF1E1">
 <h3>//将三个参数放到 Session 中保存起来,供后续页面使用

    session.setAttribute("host",host);
   <br>&nbsp;在登陆邮件服务器后,您可以:
    session.setAttribute("user",user);
 </h3>
    session.setAttribute("password",password);
    <center>
    response.sendRedirect("listlogin.html");
   }<p>
    用户成功登陆邮箱后,提供用户一些操作,如:发送邮件、我的收件箱、我
   catch(MessagingException m)
       <a href="sendmail.html">发送 e-mail</a>
的回收站等。
   {
     </p>
        out.println(m.toString());
     <p>
        out.println("<p>登陆邮 件服务器失败 , <a href='loginmail.html'> 请 返回
       <a href="listfolder.jsp">我的收件箱</a>
 </a></p>");
   }</p>
 %> <p>
 </body>
       <a href="filtermail.jsp">我的回收站</a>
 </html>
     </p>
     </center>
 </body>
 </html>
//sendmail.html
<html>
<head>

<title>发送 e-mail 的表单</title>

</head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<body bgcolor="#CFF1E1">
<center><h2>

写信

  </h2></center>
  <form action="sendmail.jsp" method="post">
  <table align="center">
     用户点击发送邮件操作时的用户信息录入界面,当用户点击提交按钮,
    <tr>
sendmail.jsp 将处理用户信息并返回结果。
       <td>

         收件人地址:<br><input name="to" size="30">
//sendmail.jsp
<html>
      </td>
<head>
   </tr>
   <tr>
<title>发送 e-mail</title>
      <td>
</head>
         主题:<br><input name="subject" size="60">
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="javax.mail.*,javax.mail.internet.*,
     </td>
                                              javax.activation.*,java.util.*"%>
  </tr>
<body bgcolor="#CFF1E1">
  <tr>
<%
     <td>
 //获取用户信息参数和邮件主机名
     <p>内容:<br>
 String host=(String)session.getAttribute("host");
    处理用户从 sendmail.html 页面提交的信息。
           <textarea name="text" rows=8 cols=60></textarea>
 String user=(String)session.getAttribute("user");
         </p>
 String password=(String)session.getAttribute("password");
      </td>
   </tr>
 try{
   <tr>
         //获得属性,并生成 Session 对象
      <td>

           附件:<br>
         Properties props=new Properties();
         Session sendsession;
           <input type="file" name="attachment" size="25">
         Transport transport;
      </td>
         sendsession = Session.getInstance(props, null);
   </tr>
</table> //向属性中写入 SMTP 服务器的地址
<center><p><br>
         props.put("mail.smtp.host", "smtp."+host);
   <input type="submit" value="发送">&nbsp&nbsp&nbsp&nbsp&nbsp;
         //设置 SMTP 服务器需要权限认证

  <input type="reset" value="重写">
      props.put("mail.smtp.auth","true");

</p></center>
       //设置输出调试信息
</form>
//listfolder.jsp
 <%@ page contentType="text/html;charset=GB2312"%>
 <%@ page import="javax.mail.*,java.util.*,javax.mail.search.*"%>
 <html>
 <head>

 <title>显示收件箱中所有 e-mail 列表</title>

 </head>
 <body bgcolor="#CFF1E1">
 <center><h2>

   我的收件箱

 </h2></center>
 <%
     用户点击我的收件箱操作时信息处理页面,
  try{                  该段代码用于显示用户邮箱中的
邮件。
      //获得一个 session 对象,并设置其属性为 true
 //filtermail.jsp
      Properties props=new Properties();
 <%@ page contentType="text/html;charset=GB2312"%>
      Session recesession=Session.getInstance(props,null);
 <%@ page import="javax.mail.*,java.util.*,javax.mail.search.*"%>
      recesession.setDebug(true);
 <html>
      //创建一个 Store 对象,并根据得到的三个参数连接到邮件服务器中的用户邮
 <head>

 <title>将垃圾邮件过滤到回收站</title>
 箱
 </head>
      Store store=recesession.getStore("pop3");
 <body bgcolor="#CFF1E1">
      String host=(String)session.getAttribute("host");
 <center><h2>
      用户点击我的回收站操作时信息处理页面,
      String user=(String)session.getAttribute("user");   该段代码用于显示用户邮箱中被
    我的回收站
      String password=(String)session.getAttribute("password");
过滤的邮件。
      store.connect("pop."+host,user,password);
 </h2></center>
 //detailmail.jsp
 <% //打开收件箱
 <%@ page contentType="text/html;charset=GB2312"%>
    try{
 <%@ pageinbox=store.getFolder("INBOX");
      Folder import="javax.mail.*,java.util.*,java.io.*"%>
         //获得一个 session 对象,并设置其属性为 true
      inbox.open(Folder.READ_ONLY);
 <html>
 <head>
      //得到邮箱中的 e-mail 总数
         Properties props=new Properties();
 <title>显示 e-mail 的详细信息</title>
         Session recesession=Session.getInstance(props,null);
      int count=inbox.getMessageCount();
         recesession.setDebug(true);
 </head>
 <body//创建一个 Store 对象,并根据得到的三个参数连接到邮件服务器中的用户
          bgcolor="#CFF1E1">
      //设置过滤规则,对接收的 e-mail 进行过滤,
 <%
 邮箱
    //得到当前 e-mail 所在的邮箱类型(收件箱或是回收站)
         SearchTerm        st=new     OrTerm(new      SubjectTerm(" 过 滤 "),new
         Store store=recesession.getStore("pop3");
 FromStringTerm("jinny@localhost"));
    String bin=request.getParameter("bin");
         String host=(String)session.getAttribute("host");
         Message[] filtermsg=inbox.search(st);
    String mybin="";
      在String user=(String)session.getAttribute("user");
           listfolder.jsp 页面,用户可以查看单封邮件,上述代码就是实现查看单封
    if(bin.equals("receive")) 设置删除标志
      //对被过滤出的 e-mail mybin="收件箱";
         String password=(String)session.getAttribute("password");
         store.connect("pop."+host,user,password);
         for(int i=0;i<filtermsg.length;i++)
        else mybin="回收站";
         {
         //打开收件箱
 %>           Message msg=filtermsg[i];
         Folder inbox=store.getFolder("INBOX");
              if(msg!=null)
邮件的功能。


 在这个整合的系统中,采用 163 的邮箱帐号作为测试帐号,运行结果如图:




            图 16 登陆邮件服务器
 点击进入邮箱:




            图 17 成功登陆邮箱
点击发送邮件:




             图 18 发送邮件
到邮箱进行查看如图:
图 19 使用网页查看邮件
点击发送:




          图 20 发送邮件成功
点击收件箱:




          图 21 我的收件箱


           第五章 结语
本文首先介绍了 JavaMail 邮件系统开发过程所涉及的协议,并简单的介绍
了 JavaMail API 中重要的类和 JavaMail 开发环境以及开发语言的特点。在系统
的设计过程中,由浅入深的实现了邮件的发送、接收功能。并最终实现了各个子
模块的整合,形成了简单的基于 JavaMail 的邮件系统。
  在这次设计实现基于 JavaMail 邮件系统的过程中,我学到了很多的知识和
经验,为提供了一次很好的实践的机会。在此,谢谢我的指导教师以及学校的精
心安排。
主要参考文献
    [1]李华飚.Java 中间件开发技术[M]. 北京:中国水利水电出版社 ,2005
    [2]王克宏.Java 技术及其应用[M].北京:高等教育出版社,2004
    [3] 钟 忺 , 刘 春 燕 . 基 于 JavaMail API 的 邮 件 认 证 与 接 收 [J]. 计 算 机 与 数 字 工
程,2007,35(3):145-147
    [4]王伟.基于 JavaMail API 的邮件服务的开发及实现[J].现代计算机,2004,(1):73-76
    [5]杨淑萍,聂哲.基于 JavaMail 的邮件客户端程序的设计与实现[J].电脑知识与技术
[J],2006,(20):106-108
    [6] 李 瑾 , 卢 松 涛 . 基 于 Java 语 言 邮 件 收 发 系 统 的 设 计 与 实 现 [J]. 福 建 电
脑,2007,(3):162-163
    [7]钟珞,刘玲,夏红霞.基于 JavaMail API 的 Web 邮件系统开发[J].武汉理工大学学
报,2006,28(6):84-86
    [8] 潘 林 武 . 基 于 JavaMail 的 邮 件 群 发 系 统 的 设 计 与 实 现 [J]. 科 技 情 报 开 发 与 经
济,2007,17(21):214-215
    [9] JavaMail.http://java.sun.com/products/javamail/in

More Related Content

Viewers also liked

Bill young cv september
Bill young cv  septemberBill young cv  september
Bill young cv septemberBill Young
 
Attase Kft konyhatechnológiai katalógus 2016
Attase Kft konyhatechnológiai katalógus 2016Attase Kft konyhatechnológiai katalógus 2016
Attase Kft konyhatechnológiai katalógus 2016geroka
 
Vigo al frente de un proyecto europeo sobre energía undimotriz
Vigo al frente de un proyecto europeo sobre energía undimotrizVigo al frente de un proyecto europeo sobre energía undimotriz
Vigo al frente de un proyecto europeo sobre energía undimotrizEl_Blog_De_La_Energia
 
Ikea apuesta por las soluciones sostenibles
Ikea apuesta por las soluciones sosteniblesIkea apuesta por las soluciones sostenibles
Ikea apuesta por las soluciones sosteniblesEl_Blog_De_La_Energia
 
Reglamento de normas de seguridad e higiene al realizar un desensamble y
Reglamento de normas de seguridad e higiene al realizar un desensamble yReglamento de normas de seguridad e higiene al realizar un desensamble y
Reglamento de normas de seguridad e higiene al realizar un desensamble yJAIR CORZO
 
Mi power conquista de chile
Mi power conquista de chileMi power conquista de chile
Mi power conquista de chileMarta LaMala
 
El derecho ciudadano del paciente con problemas de salud menta - CICAT-SALUD
El derecho ciudadano del paciente con problemas de salud menta - CICAT-SALUDEl derecho ciudadano del paciente con problemas de salud menta - CICAT-SALUD
El derecho ciudadano del paciente con problemas de salud menta - CICAT-SALUDCICAT SALUD
 
V. shear and torsional strength design
V. shear and torsional strength designV. shear and torsional strength design
V. shear and torsional strength designChhay Teng
 
Mobile Cloud Computing : The Upcoming Trend !
Mobile Cloud Computing : The Upcoming Trend !Mobile Cloud Computing : The Upcoming Trend !
Mobile Cloud Computing : The Upcoming Trend !Sai Natkar
 

Viewers also liked (12)

Bill young cv september
Bill young cv  septemberBill young cv  september
Bill young cv september
 
Attase Kft konyhatechnológiai katalógus 2016
Attase Kft konyhatechnológiai katalógus 2016Attase Kft konyhatechnológiai katalógus 2016
Attase Kft konyhatechnológiai katalógus 2016
 
Vigo al frente de un proyecto europeo sobre energía undimotriz
Vigo al frente de un proyecto europeo sobre energía undimotrizVigo al frente de un proyecto europeo sobre energía undimotriz
Vigo al frente de un proyecto europeo sobre energía undimotriz
 
Ikea apuesta por las soluciones sostenibles
Ikea apuesta por las soluciones sosteniblesIkea apuesta por las soluciones sostenibles
Ikea apuesta por las soluciones sostenibles
 
Reglamento de normas de seguridad e higiene al realizar un desensamble y
Reglamento de normas de seguridad e higiene al realizar un desensamble yReglamento de normas de seguridad e higiene al realizar un desensamble y
Reglamento de normas de seguridad e higiene al realizar un desensamble y
 
Q2.
Q2.Q2.
Q2.
 
Latest Trends in University Funding
Latest Trends in University FundingLatest Trends in University Funding
Latest Trends in University Funding
 
Xmia6 myxomicota
Xmia6 myxomicotaXmia6 myxomicota
Xmia6 myxomicota
 
Mi power conquista de chile
Mi power conquista de chileMi power conquista de chile
Mi power conquista de chile
 
El derecho ciudadano del paciente con problemas de salud menta - CICAT-SALUD
El derecho ciudadano del paciente con problemas de salud menta - CICAT-SALUDEl derecho ciudadano del paciente con problemas de salud menta - CICAT-SALUD
El derecho ciudadano del paciente con problemas de salud menta - CICAT-SALUD
 
V. shear and torsional strength design
V. shear and torsional strength designV. shear and torsional strength design
V. shear and torsional strength design
 
Mobile Cloud Computing : The Upcoming Trend !
Mobile Cloud Computing : The Upcoming Trend !Mobile Cloud Computing : The Upcoming Trend !
Mobile Cloud Computing : The Upcoming Trend !
 

Similar to xcvx

Liferay环境搭建
Liferay环境搭建Liferay环境搭建
Liferay环境搭建donotbeevil
 
X Fire开发指南
X Fire开发指南X Fire开发指南
X Fire开发指南yiditushe
 
Struts快速学习指南
Struts快速学习指南Struts快速学习指南
Struts快速学习指南yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletJustin Lin
 
Csdn Emag(Oracle)第四期
Csdn Emag(Oracle)第四期Csdn Emag(Oracle)第四期
Csdn Emag(Oracle)第四期yiditushe
 
Web性能测试指标参考v0.2
Web性能测试指标参考v0.2Web性能测试指标参考v0.2
Web性能测试指标参考v0.2beiyu95
 
SAM5业务流程梳理建模手册
SAM5业务流程梳理建模手册SAM5业务流程梳理建模手册
SAM5业务流程梳理建模手册BPC流程社区
 
test
testtest
testxieyq
 
深入研究 Windows 系統服務 效能調校與故障排除
深入研究 Windows 系統服務    效能調校與故障排除深入研究 Windows 系統服務    效能調校與故障排除
深入研究 Windows 系統服務 效能調校與故障排除5045033
 
網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
Moodle 2.3 图文安装教程
Moodle 2.3 图文安装教程Moodle 2.3 图文安装教程
Moodle 2.3 图文安装教程YUCHENG HU
 
Axis1.4 开发指南 V1.0
Axis1.4 开发指南 V1.0Axis1.4 开发指南 V1.0
Axis1.4 开发指南 V1.0yiditushe
 
Eclipse開發平台快速入門
Eclipse開發平台快速入門Eclipse開發平台快速入門
Eclipse開發平台快速入門Luo Korth
 
Java安全性编程实例
Java安全性编程实例Java安全性编程实例
Java安全性编程实例yiditushe
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记yiditushe
 
同济优秀课程设计 - 软件测试报告
同济优秀课程设计 - 软件测试报告同济优秀课程设计 - 软件测试报告
同济优秀课程设计 - 软件测试报告Kerry Zhu
 
一次Web性能测试小结
一次Web性能测试小结一次Web性能测试小结
一次Web性能测试小结beiyu95
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 

Similar to xcvx (20)

Liferay环境搭建
Liferay环境搭建Liferay环境搭建
Liferay环境搭建
 
X Fire开发指南
X Fire开发指南X Fire开发指南
X Fire开发指南
 
Struts快速学习指南
Struts快速学习指南Struts快速学习指南
Struts快速学习指南
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
 
Csdn Emag(Oracle)第四期
Csdn Emag(Oracle)第四期Csdn Emag(Oracle)第四期
Csdn Emag(Oracle)第四期
 
Web性能测试指标参考v0.2
Web性能测试指标参考v0.2Web性能测试指标参考v0.2
Web性能测试指标参考v0.2
 
SAM5业务流程梳理建模手册
SAM5业务流程梳理建模手册SAM5业务流程梳理建模手册
SAM5业务流程梳理建模手册
 
test
testtest
test
 
深入研究 Windows 系統服務 效能調校與故障排除
深入研究 Windows 系統服務    效能調校與故障排除深入研究 Windows 系統服務    效能調校與故障排除
深入研究 Windows 系統服務 效能調校與故障排除
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
Moodle 2.3 图文安装教程
Moodle 2.3 图文安装教程Moodle 2.3 图文安装教程
Moodle 2.3 图文安装教程
 
Axis1.4 开发指南 V1.0
Axis1.4 开发指南 V1.0Axis1.4 开发指南 V1.0
Axis1.4 开发指南 V1.0
 
Eclipse開發平台快速入門
Eclipse開發平台快速入門Eclipse開發平台快速入門
Eclipse開發平台快速入門
 
Java安全性编程实例
Java安全性编程实例Java安全性编程实例
Java安全性编程实例
 
Struts学习笔记
Struts学习笔记Struts学习笔记
Struts学习笔记
 
同济优秀课程设计 - 软件测试报告
同济优秀课程设计 - 软件测试报告同济优秀课程设计 - 软件测试报告
同济优秀课程设计 - 软件测试报告
 
一次Web性能测试小结
一次Web性能测试小结一次Web性能测试小结
一次Web性能测试小结
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 

xcvx

  • 1.
  • 2. 基于 JavaMail 邮件系统的设计与实现 摘 要 本论文阐述了 Web 邮件系统所涉及的几个重要协议,对 JavaMail API 核心类进行了介 绍,并给出了其中发送邮件功能的详细设计过程。JavaMail 结合 JSP 的结构化特性,易于实 现灵活高效、方便移植的 Web 邮件应用程序。 关键词:文本邮件;HTML 邮件;带附件邮件;JavaMail
  • 3. Design and Implementation of Mail System Based on JavaMail Abstract This paper first expatiated on some protocols come down to the Web mail system , and then introduced the architecture and core classes of JavaMail API. After that , the articlepresented the system framework and the detailed design process of mail sending. In conclusion , it can easily implement flexible , high effective and transplantable Web mail applications with JavaMail and structured JSP. Keywords:text mail;html mail;attachment mail;javamail
  • 4. 录 第一章 引(前) 言................................................................................................................. 6 1.1 研究意义 ........................................................................................................................... 6 1.2 研究现状 ........................................................................................................................... 7 第二章 相关邮件协议和 JavaMail API ........................................................................................ 7 2.1 相关邮件协议 ................................................................................................................... 7 2.2 JavaMail API..................................................................................................................... 8 2.2.1 JavaMail API 简介 ................................................................................................ 8 2.2.2 JavaMail API 核心类 ............................................................................................ 8 第三章 应用系统开发工具 ............................................................................................................. 9 3.1 开发语言简介 ................................................................................................................... 9 3.1.1 Java 语言简介 ....................................................................................................... 9 3.1.2 Jsp 语言简介 ....................................................................................................... 10 3.2 开发工具 ......................................................................................................................... 11 3.2.1 Eclipse .................................................................................................................. 11 3.2.2 Tomcat ................................................................................................................. 12 3.3 开发软件的安装 ............................................................................................................. 12 3.3.1JAVA 环境的安装与配置 ..................................................................................... 12 3.3.2Eclipse 的安装 ...................................................................................................... 13 3.3.3Tomcat 的安装 ..................................................................................................... 14
  • 5. 第四章 JavaMail 系统的实现 ...................................................................................................... 14 4.1 邮件发送功能-初步探索 ................................................................................................. 14 4.1.1 邮件发送过程总览 ............................................................................................... 14 4.1.2 文本邮件发送 ....................................................................................................... 15 4.1.3 Html 邮件发送 ..................................................................................................... 18 4.2 邮件发送功能的深入研究-带附件的邮件发送 ............................................................. 20 4.3 文本邮件和 Html 邮件的接收功能的实现 .................................................................... 22 4.4 邮件发送系统的整合 ..................................................................................................... 24 第五章 结语................................................................................................................................... 31
  • 6. 基于 JavaMail 邮件系统的设计与实现 第一章 引(前) 言 本文是一项基于 JavaMail 的邮件系统的综合性研究,使用 Sun 公司提供的 JavaMail API 实现电子邮件的发送、电子邮件的接收等等功能。 1.1 研究意义 随着社会的发展,科技的进步,作为信息载体的计算机日益显露出其举足轻 重的地位。当今社会已步入了信息社会,知识经济将成为新世纪的主导产业。人 们传统的联系方式也在不断的被改变。伴随着 Internet 的发展,电子邮件以其使 用简易、投递迅速、收费低廉,易于保存、全球畅通无阻等等优点被广泛地应用, 它使人们的交流方式得到了极大的改变。电子邮件已是人们沟通、交流的重要工 具。 由于 E-mail 是当今人们交流的重要工具之一,因而,对 E-mail 系统的研究 也逐渐变的热起来。基于 JavaMail 邮件系统具有快捷、方便的优点,吸引了众 多的网络用户,使其成为 E-mail 研究方向的热点之一。 最初人们在使用 E-mail 服务时,必须使用邮件客服端,如:Outlook、Foxmail 等软件,去接收邮件服务器上的邮件。由于操作系统的不同,往往需要不同的邮 件接收客户端,给人们接收邮件带来很大的不便。但是基于 JavaMail 的邮件系 统只要一个网络浏览器就可以实现 E-mail 的日常收发功能,而网络浏览器是任 何操作系统中都自带的软件,用户在世界任何一个角落任何一台计算机都可以进 行 E-mail 的收发工作。 此外,由于最初用户接收邮件的设置信息均保存在客服端,当用户重新安装 操作系统或者更换计算机还要重新设置,而基于 JavaMail 的 Web 邮件系统的设 置保存在邮件服务器上,不论你更换电脑还是系统,收发邮件的方式都是按照以 前的设置进行的,使邮件的收发更合你的口味。 基于 JavaMail 的邮件系统让你不在为机器配置担忧,而且还为用户的邮件 安全分担忧愁。 由于最初需要使用客服端软件收发软件,硬件配置低的计算机就显得“爱莫 能助”了。虽然计算机的发展使得硬件问题不在是个问题,但是不强调硬件的配 置也是基于 JavaMail 邮件系统的一个优点之一。此外,由于客户端软件维护和 升级困难,网络浏览器的更新速度要远远大于邮件客户端软件的更新速度,这就 给用户一个更安全的环境。
  • 7. 日前,基于 JavaMail 邮件系统的发展越来越成熟。多线程的设计方法,大 大的提高了系统的通信效率和成本;采用 MVC 设计模式的邮件系统还大大的减 少了系统的维护量。 当然,基于 JavaMail 的邮件系统缺乏对动态页面的支持能力,没有集成有 效地数据库处理功能,也存在系统扩展性差、数据处理速度稍慢等缺点。但是, 这些问题已经有了很好的起步,将不再是大的问题。 总之,计算机的广泛应用,Internet 的不断发展,E-mail 在日常通讯中的地 位越来越重要。虽然传统的 C/S 模式的邮件系统仍占有重要地位,但基于 JavaMail 的 Web 邮件系统会以其快捷、方便的等等优点为越来越多的人所接收,广泛的 应用到各个领域,成为一名后起之秀。 1.2 研究现状 E-mail 是信息化时代最重要的联系工具之一,在日常的工作学习中具有非常 重要作用。 对 E-mail 的研究也层出不穷,基于 JavaMail 邮件系统的设计与实现大多数 都是研究和使用 Sun 公司提供的 JavaMail API 去实现其邮件发送和接收功能。为 了便于代码维护,使用 JSP 和 Servelet 方式实现 JavaMail 邮件系统;为了提高系 统的效率和通信成本,又加入了多线程技术等等。 第二章 相关邮件协议和 JavaMail API 2.1 相关邮件协议 邮件的传送要依赖于具体的传输协议,主要有:SMTP、POP3、IMAP、MIME。 (1)SMTP:简单邮件传输协议,该协议定义了发送电子邮件的规范。邮 件发送过程中,在 SMTP 基础上的发送邮件的应用程序与网络中的电子邮件服 务器交换数据信息,最终把邮件传送至目录服务器。 (2)POP:邮局协议,当前的版本为 3,也称作 POP3。POP 是 Internet 上 的大多数人用来接收邮件的机制。它为每个用户的每个邮箱定义支持,这是它所 做的全部工作,也是大多数问题的根源。如果要从邮件服务器中查询特定帐户的 邮件并下载到本地,就可以使用基于 POP3 协议的应用程序。 (3)IMAP:用于接收消息的更加高级的协议,它是在 RFC2060 中定义的。 IMAP 的含义是"Internet 消息访问协议",当前版本是第 4 版,也称作 IMAP4。 使用 IMAP 时,邮件服务器必须支持该协议。不能只是简单地把程序转变为支
  • 8. 持 IMAP,而不是支持 POP,就指望能支持 IMAP 中的一切。假定您的邮件服务 器支持 IMAP,那么基于 JavaMail 的程序就可利用在服务器上拥有多个文件夹 的用户,并且这些文件夹可以被多个用户共享的功能。 4)MIME:是"多用途的网际邮件扩充协议"。它不是一种邮件传输协议,相 反,它定义传输的内容:消息的格式、附件等。许多文档都定义了 MIME 协议, 包含:RFC 822、RFC 2045、RFC2046 和 RFC 2047。作为 JavaMail API 的用户, 一般不需要担心这些格式。但是,这些格式确实存在,并为您的程序所用。 2.2 JavaMail API 2.2.1 JavaMail API 简介 JavaMail API 是 SUN 为 Java 开发者提供对电子邮件处理的延伸,能用于读 取、编写和发送电子消息的包(标准扩展)。为管理电子邮件提供了统一的应用 编程接口,它可以处理各种 e-mail 格式(包括 IMAP、POP、SMTP 以及 MIME) 和其他 Internet 相关的讯息通信协定。 用户可使用这种包创建邮件用户代理(Mail User Agent,MUA)类型的程序, 它类似于 Foxmail、Eudora 以及 Miceosoft Outlook 这些邮件程序。其主要目的不 是像发送邮件或其他邮件传输代理(Mail Transfer Agent,MTA)类型的程序那 样用于传输、发送和转发消息。换句话说,用户可以与 MUA 类型的程序交互, 以阅读和撰写电子邮件。MUA 依靠 MTA 处理实际的发送任务。 2.2.2 JavaMail API 核心类 Session:Session 类定义了一个基本邮件会话(session),是 JavaMail API 最 高层入口类。所有其他类都是经由这个 Session 才得以生效。Session 对象用 java.util.Properties 对象获取信息,如邮件服务器、用户名、密码及整个应用程序 中共享的其他信息。 Message :一旦获得 Session 对象,就可以继续创建要发送的消息。这由 Message 类来完成。因为 Message 是个抽象类,必需由一个子类来实现其具体功 能, 多数情况下为 javax.mail.internet.MimeMessage。MimeMessage 是个能识别 MIME 类型和头的电子邮件消息,正如不同 RFC 中所定义的。虽然在某些头部 或非 ASCII 字符也能被译码,但 Message 头只能被限制为用 US-ASCII 字符。 Address:一旦创建了 Session 和 Message,并将内容填入消息后,就可以用 Address 确定信件地址了。和 Message 一样,Address 也是个抽象类。用户使用的
  • 9. 是 javax.mail.internet.InternetAddress 类,它是 Address 的一个子类。 Authenticator: JavaMail API 也可以利用 Authenticator 通过用户名和密码访 问受保护的资源。对于 JavaMail API 来说,这些资源就是邮件服务器。JavaMail Authenticator 在 javax.mail 包中,要使用 Authenticator,先创建一个抽象类的子 类,并从 getPasswordAuthentication()方法中返回 PassaordAuthentication 实例。创 建完成后,必须向 Session 注册 Authenticator。然后,在需要认证的时候,就会 通知 Authenticator。 Transport:消息发送的最后一部分是使用 Transport 类。这个类用协议指定 的语言发送消息(通常是 SMTP) 。它是抽象类,它的工作方式与 Session 有些类 似。仅调用静态 send()方法,就能使用类的缺省版本:Transport.send(message)发 送消息,然后关闭连接。 Store :Store 类实现特定邮件协议上的读、写、监视、查找等操作。通过 javax.mail.Store 类可以访问 javax.mail.Folder 类。 Folder:Folder 类用于分级组织邮件,并提供照 javax.mail.Message 格式访问 e-mail 的能力。 第三章 应用系统开发工具 本次程序设计所采用的工作环境为 JAVA+JSP+Eclipse3.2。下面将分别介绍 这两个环境。 3.1 开发语言简介 3.1.1 Java 语言简介 Java[2]是 SUN 公司推出的新一代面向对象的程序设计语言,它是一种简单 的面向对象的分布式可移植性能优异的多线程的动态语言。它具有以下的特点: (1)简单 Java 最初是为了对家用电器进行智能化控制而设计的一种语言,因此它特别 的简单明了。它的简单性体现在以下三个方面。 ①Java 的编程风格类似于 C++的风格,因此大家都比较熟悉。 ②Java 中没有 C++中的指针和内存管理的概念,可以避免犯 C++中的常见错 误。 ③ Java 中有丰富的类库,大大方便了编程工作。 在 (2)面向对象的特性
  • 10. 面向对象性可以说是 Java 最重要的特性。Java 语言的设计完全是面向对象 的,它不支持类似于 C 语言那样的面向过程的程序设计技术。Java 支持静态和 动态风格的代码继承及重用。 (3)分布性 Java 有很强的网络特性。通过它特有的类,可以方便地处理 TCP/IP 协议和 访问网络资源。它的分布计算的特性正是它得以在网络时代风靡的重要原因。 (4)鲁棒性 Java 中对应不同的类具有的 Exception,正是这些不同的 Exception 可以防止 因为程序员的错误而造成系统的崩溃。 (5)安全性 Java 不支持指针,因此一切对内存的访问都必须通过对象的实例变量来进 行,因此可以有效的防范病毒的入侵。 (6)体系结构中立 Java 的解释器可以生成与系统体系结构无关的字节码指令,一个系统只要安 装了 Java 虚拟机就可以执行 Java 程序了。 (7)多线程性 Java 的多线程能够保证程序的并行执行。而且同步机制保证了对共享数据的 正确操作,方便用户在网络上的实时交互操作,提高系统的处理能力。 (8)动态性 Java 的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的 方法和实例变量而不会影响用户程序的执行,并且 Java 通过接口来支持多重继 承,使之比严格的继承类具有更灵活的方式和扩展性。同时用户也可以创建自己 的特有的类,以方便操作和提高编程能力。 3.1.2 Jsp 语言简介 JSP(JavaServer Pages)是由 Sun Microsystems 公司倡导、许多公司参与一起建 立的一种动态网页技术标准。JSP 技术有点类似 ASP 技术,它是在传统的网页 HTML 文件(*.htm,*.html)中插入 Java 程序段(Scriptlet)和 JSP 标记(tag),从而形 成 JSP 文件(*.jsp)。 用 JSP 开发的 Web 应用是跨平台的,即能在 Linux 下运行,也能在其他操 作系统上运行。 JSP 技术使用 Java 编程语言编写类 XML 的 tags 和 scriptlets,来封装产生动 态网页的处理逻辑。网页还能通过 tags 和 scriptlets 访问存在于服务端的资源的 应用逻辑。JSP 将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设
  • 11. 计,使基于 Web 的应用程序的开发变得迅速和容易。 JSP 页面由 HTML 代码和嵌入其中的 Java 代码所组成。服务器在页面被客 户端请求以后对这些 Java 代码进行处理,然后将生成的 HTML 页面返回给客户 端的浏览器。Java Servlet 是 JSP 的技术基础,而且大型的 Web 应用程序的开发 需要 Java Servlet 和 JSP 配合才能完成。JSP 具备了 Java 技术的简单易用,完全 的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点 Web 服务器在遇到访问 JSP 网页的请求时,首先执行其中的程序段,然后将 执行结果连同 JSP 文件中的 HTML 代码一起返回给客户。插入的 Java 程序段可 以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。 3.2 开发工具 3.2.1 Eclipse Eclipse:Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就 其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸 运 的 是 , Eclipse 附 带 了 一 个 标 准 的 插 件 集 , 包 括 Java 开 发 工 具 ( Java Development Tools,JDT) Eclipse 还包括插件开发环境(Plug-in Development 。 Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因 为它允许他们构建与 Eclipse 环境无缝集成的工具。 Eclipse 是一种通用工具平台——普遍适用的开放式扩展 IDE,它提供了功 能丰富的开发环境,允许开发者高效地创建一些能够无缝集成到 Eclipse 平台中 的工具。Eclipse 的体系结构为: 底层为 JAVA 开发环境插件(JDT),插件开发环 境(PDE),其他的第三方插件。中层为 Eclipse 的图形界面(包括——工作台, Jface,SWT),核心为工作空间(workspace)和运行时内核(runtime)。 Eclipse 的设计思想是:一切皆为插件。Eclipse 的核心是非常小的,其他所 有的功能都是以插件的形式附加到这个 Eclipse 核心之上。这样的功能插件包括 他的图形 API (称为 SWT/JFace)JAVA 开发环境插件 、 (JDT)插件开发环境 、 (PDE) 等。Eclipse 还对这些插件的协同工作提供了良好的支持,不仅安装简单,而且 还可以无缝结合。 Eclipse 对这些插件是动态载入动态调用的。所谓动态就是指,Eclipse 启动 后要真正用到这个插件时,它才会被调入内存,当插件不再被使用时,它就会被 在适当的时候清除出去。因此即使装了一大堆插件在 Eclipse 里,也不必担心某 些不常用的插件白白占着内存。
  • 12. 3.2.2 Tomcat Tomcat:Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开 发而成。由于有了 Sun 的参与和支持,最新的 Servlet 和 JSP 规范总是能在 Tomcat 中得到体现,Tomcat 5 支持最新的 Servlet 2.4 和 JSP 2.0 规范。因为 Tomcat 技术先进、性能稳定,而且免费,因而深受 Java 爱好者的喜爱并得到了 部分软件开发商的认可,成为目前比较流行的 Web 应用服务器。 Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不 是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。对于一个初学者 来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应对 HTML 页面的访问请求。实际上 Tomcat 部分是 Apache 服务器的扩展,但它是 独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进 程单独运行的。 此外,我们还需要两个 Jar 包,一个是 mail.jar,另一个是 activation.jar。这 两个 Jar 包放在 JavaMail/WEB-INF/lib 下。 3.3 开发软件的安装 3.3.1JAVA 环境的安装与配置 在安装 Eclipse 之前,需要先安装 JDK(Java Development Kits)。 在 JDK 安装完成之后,一般需要设置计算机系统的环境变量,以便于其它 软件确定 JDK 的安装位置。在 WindowsXP 操作系统环境,具体操作步骤如下: 1.选择“开始”菜单中的“控制面板”命令,打开控制面板窗口,双击选择“系 统”,打开如图 1 所示的“系统属性”对话框。 2.单击“系统属性”对话框中的“环境变量”按钮,进入图 2 所示的“环境变量” 对话框。在该对话框中可以设置只有当前用户登录时才有效的用户变量,也可以 设置该系统的所有用户登录时都有效的系统变量。 3.在“环境变量”对话框中单击“新建”按钮,在打开图 3 所示的新建系统变量 对话框输入变量名为 JAVA_HOME,其环境变量的值应该设置为 JDK 的安装位 置。 4.然后在如图 3 所示的“环境变量”对话框中再次选择 Path 环境变量,将 F:Program FilesJavajdk1.5.0_09bin 添加到对应的变量值后面,注意和前面的值 用“;”隔开。单击“确定”按钮即可完成 JDK 相关环境变量的设置。
  • 13. 图 1:系统属性对话框 图 2:环境变量对话框 图 3:新建系统变量对话框 3.3.2Eclipse 的安装 Eclipse 是开放源代码的项目,可以到 www.eclipse.org 去免费下载 Eclipse 的 最新版本。其中可以选择下载 Eclipse SDK,它包括了 Eclipse 开发环境、Java 开
  • 14. 发环境、Plug-in 开发环境以及所有源代码和文档。 Eclipse 在 下 载 完 成 后 , 只 需 要 将 对 应 的 压 缩 包 文 件 eclipse –S DK-3.1.1-win32.zip 解压缩到指定位置,即可完成安装。 Eclipse 为中国用户提供了非常好的支持,通过安装 Eclipse 多国语言包, Eclipse 可以自动实现开发环境的本地化,即自动根据操作系统的语言环境选择 语言包。 到 www.eclipse.org 去免费下载对应 Eclipse 3.1.1 版本的多国语言包,称为 Language Pack。下载完成后,可获得名称为 NLpack-eclipse-SDK-3. 1.1a-win32.zip 的压缩包,下面介绍具体的安装步骤: 1.首先必须关闭 Eclipse,注意在安装 Eclipse 各个插件工具时都需要先关闭 Eclipse。 2.对压缩包进行解压缩。 3.在 Eclipse 安装目录下创建子目录 links,并在该目录中新建一个文本文件, 名称为 language.start,在文件中键入如下一行信息。 Path= d:eclipselanguage 3.3.3Tomcat 的安装 Tomcat 是开放源代码的项目,可以到 www.apache.org 去免费下载 Tomcat 的 最新版本。下载 apache-tomcat-6.0.16.zip,然后解压缩到 C:javaTomcat 6.0 文件 夹中。 从 Tomcat 4.0 开始,Tomcat 已经不依赖环境变量中的 CLASSPATH 了。但 是问了编写的 Java 程序可以顺利编译。 Set catalina_home= C:javaTomcat 6.0 Set classpath=.; C:javaTomcat 6.0libservlet-api.jar 进入 C:javaTomcat 6.0bin 文件夹,双击 startup.bat,Tomcat 即可启动。 第四章 JavaMail 系统的实现 4.1 邮件发送功能-初步探索 4.1.1 邮件发送过程总览 发送一封邮件,一般需要六个步骤: 第一步:确定要发送的邮件服务器的地址。 如:String mailserver = “smtp.163.com” ;
  • 15. 第二步:设置邮件的传输协议。 如:Properties props = System.getProperties(); props.put("mail.smtp.host",mailserver); 第三步:建立邮件发送的连接。 如:Session session = Session.getDefaultInstance(props,null); 第四步:创建发送信息的载体。如: Message msg = new MimeMessage(session); 第五步:设置相关的邮件属性,如主题、发件人、收件人、内容以及邮件发 送日期。 如:msg.setFrom(new InternetAddress(from));//设置发信人地址 msg.setRecipient(Message.RecipientType.TO,new InternetAddress(to)); //设置 收信人地址 msg.setSubject(subject);//设置邮件主题 msg.setSendDate(new Date());//设置发送日期 msg.setText(content);//设置邮件内容 第六步:发送邮件。 如:Transport.send(msg); 上述六个步骤适合任意类型的电子邮件的发送,也是电子邮件发送必须的步 骤,不同类型电子邮件的发送只是在个别部分的处理过程的不同。 4.1.2 文本邮件发送 发送文本邮件是 JavaMail 中最基本的操作。在这个程序中,用户可以在 Html 页面上输入要发送邮件的内容和地址,通过表单把邮件的内容提交给一个 JSP 页 面进行处理。为了测试方便,使用 James 服务器做为邮件服务器。 simplemail.html Sendsimplemail.jsp 其用户窗口如下图(图 4):
  • 16. 图 4 文本邮件发送用户信息输入页面 处理用户信息的 JSP 页面的主要代码如下: Properties props=new Properties(); sendsession = Session.getInstance(props, null); 定义一个Properties对象,获取系统属性并生成Session对象。 props.put("mail.smtp.host", "localhost"); props.put("mail.smtp.auth","true"); 向属性中写入 SMTP 服务器的地址,并设置 SMTP 服务器需要权限认证。 Message message = new MimeMessage(sendsession); 根据 Session 对象,生成一个 Message 对象。由于 Message 类为抽象类,因 此需用其子类 MimeMessage 类生成其实例。 message.setFrom(new InternetAddress(request.getParameter("from"))); message.setRecipient(Message.RecipientType.TO,new InternetAddress(request.getParameter("to"))); message.setSubject(new String(request.getParameter("subject").getBytes("ISO8859_1"),"GBK")); message.setSentDate(new Date()); message.setText(new String(request.getParameter("text").getBytes("ISO8859_1"),"GBK")); message.saveChanges(); 上述代码设置了邮件的具体信息,如:收件人地址、发件人地址、e-mail 标
  • 17. 题、邮件发送时间、邮件正文等并保存对于 email 的修改。 Transport transport; transport=sendsession.getTransport("smtp"); transport.connect("localhost","jinny","jinny"); transport.sendMessage(message,message.getAllRecipients()); transport.close(); 根据 Session 对象生成一个 Transport 对象,连接到邮件服务器。此时即可发 送 e-mail,在发送 e-mail 后关闭 transport 对象,则可以大大节约系统资源。 点击发送邮件,此时结果如图: 图 5 点击发送文本邮件的页面 若输出“e-mail 发送成功! 则说明邮件发送成功,否则邮件发送失败。 , ” 使用 Foxmail 查看邮件,结果如图:
  • 18. 图 6 使用 Foxmail 查看文本邮件 4.1.3 Html 邮件发送 发送 Html 邮件跟发送 Text 邮件没有太大的不同,创建邮件的时候稍微有所 区别,其他各部分的操作都是相同。只需要调用 setContent()方法,把 content 设 置为:”text/html”。因此,我们在 Html 页面添加一个 select,当用户选择以 Html 格式发送时,type 就为 html,邮件将以 Html 格式发送。 htmlmail.html sendhtmlmail.jsp 其登陆窗口和用户数据如下图(图):
  • 19. 图 7 HTML 邮件发送用户信息输入页面 sendhtmlmail.jsp 主要代码如下: String type = request.getParameter("type"); 获取邮件发送的类型。 message.setContent(text,type+";charset=GB2312"); 置邮件发送的类型,若 type 属性为“text/plain” 则邮件以文本格式发送。若 , type 属性为“text/html” 则邮件以 HTML 格式发送。 , 点击发送邮件,此时结果如图: 图 8 HTML e-mail 的发送
  • 20. 这样,添加上述两行代码,HTML 邮件的发送过程就结束了。若输出“e-mail 发送成功! 则说明邮件发送成功,否则邮件发送失败。 , ” 使用 Foxmail 查看邮件,结果如图: 图 9 使用 Foxmail 接受 HTML 邮件 4.2 邮件发送功能的深入研究-带附件的邮件发送 发送带附件的邮件最为复杂,它涉及很多方面的知识。在这里仍然采用 JSP 和 JavaBean 的方法实现带附件的邮件发送。 此 外 , 要完 成 附件 上传 功 能 还必 须 添加 form 的 enctype 属 性 , 其 值 为”multipart/form-data”。 其登陆窗口如下图(图):
  • 21. 图 10 带附件的邮件发送用户信息输入页面 sendattachmail.jsp 的主要代码: BodyPart messageBodyPart=new MimeBodyPart(); messageBodyPart.setText(new String(request.getParameter("text").getBytes("ISO8859_1"),"GBK")); 生成一个 BodyPart 对象,由于 BodyPart 类是抽象类,故应由其子类 MimeBodyPart 类实例化对象。建立第一部分:文本正文。 Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); 创建一个 Multipart 对象,因为 Multipart 对象也是抽象类,因此,也需要由 其子类 MimeMultipart 类生成子类。并且将第一部分的文本正文 messageBodyPart 对象添加进去。 attachBodyPart=new MimeBodyPart(); DataSource source=new FileDataSource(attachment); attachBodyPart.setDataHandler(new DataHandler(source)); attachBodyPart.setFileName(attachment); multipart.addBodyPart(attachBodyPart); message.setContent(multipart); 再生成一个 BodyPart 对象,用来处理附件。使用 setDataHandler()方法设置 附件的数据处理器,使用 setFileName()方法设置文件名,并将附件对象添加到 Multipart 对象中去。 点击发送邮件,结果如图:
  • 22. 图 11 带附件邮件的发送页面 使用 Foxmail 查看邮件,结果如图: 图 12 使用 Foxmail 接收带附件邮件 4.3 文本邮件和 Html 邮件的接收功能的实现 在 JavaMail 中,接收文本邮件和 HTML 格式邮件的处理方法基本上是一致 的。在这个程序中, 首先,由用户输入邮件服务器,由用户给出邮箱的用户名 和密码,登陆邮件服务器查看邮件。 此程序,仍然使用 HTMT 页面作为用户输入信息页面,之后采用 JSP 和
  • 23. JavaBean 的方法显示用户邮箱中邮件的数目和查看单封邮件。 其登陆窗口如下图(图): 图 13 登陆邮箱页面 checklogin.jsp 的主要代码: Store store=recesession.getStore("pop3"); String host=request.getParameter("host"); String user=request.getParameter("user"); String password=request.getParameter("password"); store.connect(host,user,password); 创建一个 Store 对象,并根据得到的三个参数连接到邮件服务器中的用户邮 箱。 Folder inbox=store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); 打开收件箱,在此,设置为邮件只读。 Message message=inbox.getMessage(i); String title=message.getSubject(); …… 使用 getMessage()方法获取单封信件,使用 getSubject()方法获取邮件的主题, 使用 getFrom()方法获取发件人等等。 标题:<a href="messagedetail.jsp? msg=<%=i%>&host=<%=host%>&user=<%=user%> &password=<%=password%>"><%=title%></a> 上段代码即可查看单封邮件,并传递一些参数信息。
  • 24. 点击进入邮箱,结果如图: 图 14 用户邮箱邮件列表 点击第一封邮件的标题,显示如图: 图 15 查看单封邮件 4.4 邮件发送系统的整合 由于以上各个程序只强调实现各自的主要功能,整合各个模块,就形成了基 于 JavaMail 邮件系统。在本系统中,采用 HTML 页面由用户输入数据,JSP 页 面用来调用 JavaBean 处理邮件信息,并向客服端输入发送结果。如果邮件处理 正确,则向客服端输出“邮件发送成功! 否则,输出“邮件发送失败” 由于代码 ” , 。
  • 25. 重复,在此只给出个各部分代码并作简单的功能介绍。 sendmail.html loginmail.html checkloginmail.jsp listlogin.html listfolder.jsp filtermail.jsp listfolder.jsp detailmail.jsp 其各部分代码如下: //loginmail.html <html> <head> <title>登陆邮件服务器</title> </head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <body bgcolor="#CFF1E1"> <center><h2> 登陆邮件服务器 该段代码主要起到和用户进行交互的作用,用户输入必要的信息进入用户的 邮箱。 </h2></center> <br> <form Name="receform" action="checklogin.jsp" method="post"> <table width="70%" border="0" align="center"> <tr> <td width="30%">邮件主机名:</td> <td width="70%" align="center"> <input name="host"> </td> </tr> <tr> <td width="30%">用户名:</td>
  • 26. //checklogin.jsp <%@ page contentType="text/html;charset=GB2312"%> <%@ page import="javax.mail.*,java.util.*"%> <html> <head> <title>登陆邮件服务器验证</title> </head> <body bgcolor="#CFF1E1"> <% try{ //获得一个 session 对象,并设置其属性为 true Properties props=new Properties(); 此段代码检测用户在 loginmail.html 页面输入的信息是否正确,如果信息正 Session recesession=Session.getInstance(props,null); 确,将转向用户操作页面(listlogin.html) recesession.setDebug(true); ;如果不正确,提示用户输入数据不正 确并将转向用户登录页面(loginmail.html)。 //创建一个 Store 对象,并根据得到的三个参数连接到邮件服务器中的用户邮 //listlogin.html 箱 <html> <head> store=recesession.getStore("pop3"); Store String host=request.getParameter("host"); <title>提示登陆效果,并为用户提供操作选项</title> String user=request.getParameter("user"); </head> password=request.getParameter("password"); String <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> store.connect("pop."+host,user,password); <body bgcolor="#CFF1E1"> <h3>//将三个参数放到 Session 中保存起来,供后续页面使用 session.setAttribute("host",host); <br>&nbsp;在登陆邮件服务器后,您可以: session.setAttribute("user",user); </h3> session.setAttribute("password",password); <center> response.sendRedirect("listlogin.html"); }<p> 用户成功登陆邮箱后,提供用户一些操作,如:发送邮件、我的收件箱、我 catch(MessagingException m) <a href="sendmail.html">发送 e-mail</a> 的回收站等。 { </p> out.println(m.toString()); <p> out.println("<p>登陆邮 件服务器失败 , <a href='loginmail.html'> 请 返回 <a href="listfolder.jsp">我的收件箱</a> </a></p>"); }</p> %> <p> </body> <a href="filtermail.jsp">我的回收站</a> </html> </p> </center> </body> </html>
  • 27. //sendmail.html <html> <head> <title>发送 e-mail 的表单</title> </head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <body bgcolor="#CFF1E1"> <center><h2> 写信 </h2></center> <form action="sendmail.jsp" method="post"> <table align="center"> 用户点击发送邮件操作时的用户信息录入界面,当用户点击提交按钮, <tr> sendmail.jsp 将处理用户信息并返回结果。 <td> 收件人地址:<br><input name="to" size="30"> //sendmail.jsp <html> </td> <head> </tr> <tr> <title>发送 e-mail</title> <td> </head> 主题:<br><input name="subject" size="60"> <%@ page contentType="text/html;charset=GB2312"%> <%@ page import="javax.mail.*,javax.mail.internet.*, </td> javax.activation.*,java.util.*"%> </tr> <body bgcolor="#CFF1E1"> <tr> <% <td> //获取用户信息参数和邮件主机名 <p>内容:<br> String host=(String)session.getAttribute("host"); 处理用户从 sendmail.html 页面提交的信息。 <textarea name="text" rows=8 cols=60></textarea> String user=(String)session.getAttribute("user"); </p> String password=(String)session.getAttribute("password"); </td> </tr> try{ <tr> //获得属性,并生成 Session 对象 <td> 附件:<br> Properties props=new Properties(); Session sendsession; <input type="file" name="attachment" size="25"> Transport transport; </td> sendsession = Session.getInstance(props, null); </tr> </table> //向属性中写入 SMTP 服务器的地址 <center><p><br> props.put("mail.smtp.host", "smtp."+host); <input type="submit" value="发送">&nbsp&nbsp&nbsp&nbsp&nbsp; //设置 SMTP 服务器需要权限认证 <input type="reset" value="重写"> props.put("mail.smtp.auth","true"); </p></center> //设置输出调试信息 </form>
  • 28. //listfolder.jsp <%@ page contentType="text/html;charset=GB2312"%> <%@ page import="javax.mail.*,java.util.*,javax.mail.search.*"%> <html> <head> <title>显示收件箱中所有 e-mail 列表</title> </head> <body bgcolor="#CFF1E1"> <center><h2> 我的收件箱 </h2></center> <% 用户点击我的收件箱操作时信息处理页面, try{ 该段代码用于显示用户邮箱中的 邮件。 //获得一个 session 对象,并设置其属性为 true //filtermail.jsp Properties props=new Properties(); <%@ page contentType="text/html;charset=GB2312"%> Session recesession=Session.getInstance(props,null); <%@ page import="javax.mail.*,java.util.*,javax.mail.search.*"%> recesession.setDebug(true); <html> //创建一个 Store 对象,并根据得到的三个参数连接到邮件服务器中的用户邮 <head> <title>将垃圾邮件过滤到回收站</title> 箱 </head> Store store=recesession.getStore("pop3"); <body bgcolor="#CFF1E1"> String host=(String)session.getAttribute("host"); <center><h2> 用户点击我的回收站操作时信息处理页面, String user=(String)session.getAttribute("user"); 该段代码用于显示用户邮箱中被 我的回收站 String password=(String)session.getAttribute("password"); 过滤的邮件。 store.connect("pop."+host,user,password); </h2></center> //detailmail.jsp <% //打开收件箱 <%@ page contentType="text/html;charset=GB2312"%> try{ <%@ pageinbox=store.getFolder("INBOX"); Folder import="javax.mail.*,java.util.*,java.io.*"%> //获得一个 session 对象,并设置其属性为 true inbox.open(Folder.READ_ONLY); <html> <head> //得到邮箱中的 e-mail 总数 Properties props=new Properties(); <title>显示 e-mail 的详细信息</title> Session recesession=Session.getInstance(props,null); int count=inbox.getMessageCount(); recesession.setDebug(true); </head> <body//创建一个 Store 对象,并根据得到的三个参数连接到邮件服务器中的用户 bgcolor="#CFF1E1"> //设置过滤规则,对接收的 e-mail 进行过滤, <% 邮箱 //得到当前 e-mail 所在的邮箱类型(收件箱或是回收站) SearchTerm st=new OrTerm(new SubjectTerm(" 过 滤 "),new Store store=recesession.getStore("pop3"); FromStringTerm("jinny@localhost")); String bin=request.getParameter("bin"); String host=(String)session.getAttribute("host"); Message[] filtermsg=inbox.search(st); String mybin=""; 在String user=(String)session.getAttribute("user"); listfolder.jsp 页面,用户可以查看单封邮件,上述代码就是实现查看单封 if(bin.equals("receive")) 设置删除标志 //对被过滤出的 e-mail mybin="收件箱"; String password=(String)session.getAttribute("password"); store.connect("pop."+host,user,password); for(int i=0;i<filtermsg.length;i++) else mybin="回收站"; { //打开收件箱 %> Message msg=filtermsg[i]; Folder inbox=store.getFolder("INBOX"); if(msg!=null)
  • 29. 邮件的功能。 在这个整合的系统中,采用 163 的邮箱帐号作为测试帐号,运行结果如图: 图 16 登陆邮件服务器 点击进入邮箱: 图 17 成功登陆邮箱
  • 30. 点击发送邮件: 图 18 发送邮件 到邮箱进行查看如图:
  • 31. 图 19 使用网页查看邮件 点击发送: 图 20 发送邮件成功 点击收件箱: 图 21 我的收件箱 第五章 结语
  • 32. 本文首先介绍了 JavaMail 邮件系统开发过程所涉及的协议,并简单的介绍 了 JavaMail API 中重要的类和 JavaMail 开发环境以及开发语言的特点。在系统 的设计过程中,由浅入深的实现了邮件的发送、接收功能。并最终实现了各个子 模块的整合,形成了简单的基于 JavaMail 的邮件系统。 在这次设计实现基于 JavaMail 邮件系统的过程中,我学到了很多的知识和 经验,为提供了一次很好的实践的机会。在此,谢谢我的指导教师以及学校的精 心安排。
  • 33. 主要参考文献 [1]李华飚.Java 中间件开发技术[M]. 北京:中国水利水电出版社 ,2005 [2]王克宏.Java 技术及其应用[M].北京:高等教育出版社,2004 [3] 钟 忺 , 刘 春 燕 . 基 于 JavaMail API 的 邮 件 认 证 与 接 收 [J]. 计 算 机 与 数 字 工 程,2007,35(3):145-147 [4]王伟.基于 JavaMail API 的邮件服务的开发及实现[J].现代计算机,2004,(1):73-76 [5]杨淑萍,聂哲.基于 JavaMail 的邮件客户端程序的设计与实现[J].电脑知识与技术 [J],2006,(20):106-108 [6] 李 瑾 , 卢 松 涛 . 基 于 Java 语 言 邮 件 收 发 系 统 的 设 计 与 实 现 [J]. 福 建 电 脑,2007,(3):162-163 [7]钟珞,刘玲,夏红霞.基于 JavaMail API 的 Web 邮件系统开发[J].武汉理工大学学 报,2006,28(6):84-86 [8] 潘 林 武 . 基 于 JavaMail 的 邮 件 群 发 系 统 的 设 计 与 实 现 [J]. 科 技 情 报 开 发 与 经 济,2007,17(21):214-215 [9] JavaMail.http://java.sun.com/products/javamail/in