JavaMail学习笔记(二)、JavaMail API简介和配置开发环境
一、JavaMail API 简介
JavaMail API是Sun公司为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如:SMTP、POP3、IMAP和MIME等。开发人员使用JavaMail API编写邮件处理软件时,无须考虑邮件协议底层的实现细节,只要调用JavaMail开发包中相应的API类就可以了。JavaMail API封装在一个名mail.jar的文件中,它是开发JavaMail应用程序时所必须使用的核心jar包。
二、配置 JavaMail 开发环境
- 到Oracle官网下载mail.jar开发包,目前最新版本是1.4.5。下载成功后,会得到一个javamail1_4_5.zip的文件,然后解压。解压后的目录结构如下图所示:
mail.jar:就是开发javamail程序所必须要用到的核心开发包。demo子目录:示例程序。lib子目录:该目录下包含5个独立的邮件开发包:smtp.jar、pop3.jar、imap.jar和mailapi.jar,这5个jar文件是对mail.jar文件的分类包装。其中mailapi.jar封装了创建邮件内容和面向普通开发人员调用邮件发送和接收的API类,其它三个jar文件则是封装了它们名称相对应协议的服务实现程序。mailapi.jar与其它三个jar文件的关系,犹如JDBC API与各个数据库所实现jdbc驱动程序之间的关系一样。在编译Java邮件程序时,只需要mailapi.jar文件即可,但是,在运行时必须要有相应邮件协议的底层服务实现程序。如果应用程序中只需要使用到邮件发送功能,则可以只安装smtp.jar和mailapi.jar这两个文件,如果应用程序只需要使用邮件的接收功能,则可以只安装pop3.jar或imap.jar和mailapi.jar这两个jar文件,而不用安装整个mail.jar文件。
doc子目录:javamail API文档
安装javamail
将mail.jar文件拷贝到%JAVA_HOME%\jre\lib\ext目录下
以上两种方式选其中任意一种方式即可完成javamail的安装。三、JavaMail API的分类及体系结构
JavaMail API按其功能可以划分为以下三大类:
- 创建和解析邮件内容的API发送邮件的API接收邮件的API

核心API介绍:Message类 javax.mail.Message 类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。客户端程序发送邮件时,首先使用创建邮件的API,将要创建邮件的数据封装到Message对象中,然后把这个对象传递给邮件发送API发送出去。客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message类的实例对象中,客户端程序再使用邮件解析API,从这个对象中解析出接收到的邮件数据。Session类 javax.mail.Session 类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些会话信息构建邮件收发的Store和Transport对象,以及为客户端创建Message对象提供信息支持。Transport类 javax.mail.Transport 类是发送邮件的核心API类,它的实例对象,代表实现了某个邮件发送协议的邮件发送对象,例如SMTP 协议。客户端程序创建好Message对象后,只需要使用邮件发送API得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调用它的发送方法,就可以把邮件发送给指定的SMTP服务器。Store类 javax.mail.Store 类是接收邮件的核心API类,它的实例对象代表实现某个邮件接收协议的邮件接收对象,例如POP3和IMAP协议。客户端程序接收邮件时,只需要使用邮件接收API得到Store对象,然后调用Store对象的接收方法,就可以从指定的 POP3服务器中获得邮件数据,并把这些邮件数据封装到表示邮件的Message对象中。
四、JAF 简介
JAF(JavaBeans Activation Framework,JavaBeans 激活框架)是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口。JavaMail API可以利用JAF从某种数据源中读取数据和获知数据的MIME类型,并用这些数据生成MIME消息中的消息体和消息类型。 JAF的主要作用在于让Java应用程序知道如何对一个数据源进行查看、编辑和打印等操作。大家知道,在MS Word程序中可以打开一篇Word文档中嵌套的Visio图片,JAF就是让Java程序能够完成类似的技术应用,让应用程序知道数据源支持哪些操作,每个操作分别调用哪个处理模块。对于通过JAF 封装的数据,应用程序通过JAF提供的接口可以完成如下功能:
- 访问数据源中的数据获知数据源的数据类型获知可对数据进行的各种操作用户对数据执行某种操作时,自动创建执行该操作的软件部件的实例对象