一、JavaMail API的介绍
1.1 什么是JavaMail?
- 要自己写程序发送和接收邮件,可以直接采用Socket编程连接上远程的邮件服务器,然后按照邮件协议与邮件服务器进行交互,涉及较多细节。另外,要想自己编程创建出复杂的MIME格式的邮件,是一件非常困难和麻烦的事情。
- JavaMail 是Sun公司为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如SMTP、POP3、IMAP。
- 开发人员使用JavaMail API编写邮件处理软件时,无须考虑邮件协议的底层实施细节,只要调用JavaMail开发包中相应的API类就可以了。
- JavaMail 也提供了能够创建出各种复杂MIME格式的邮件内容的相关API。
1.2 JavaMail的体系结构与API分类
1、JavaMail API按其功能划分通常可分为如下三大类:
创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。
发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。
接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
2、Session类
Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
读java mail包中的readme.txt,了解到mail.jar中的类分为java mail API和service Provider,这就类似JDBC API和数据库驱动程序一样,不要Provider的jar包,编译程序也不会有任何问题。在写程序时,可以先故意不导入Provider包,编译完全正常,等运行时才会出现错误。
1.3 JAF简介
- JAF(JavaBeans Activation Framework,JavaBeans激活框架)是一个专用的数据处理框架,它用于封装数据,并为应用程序提供访问和操作数据的接口。
- JAF的主要作用在于让Java应用程序知道如何对一个数据源进行查看、编辑和打印等操作。对于通过JAF封装的数据,应用程序通过JAF提供的接口可以完成如下功能:访问数据源中的数据
获知可对数据进行的各种操作
- 用户对数据执行某种操作时,自动创建执行该操作的软件部件的实例对象
- JavaMail API可以利用JAF从某种数据源中读取数据和获知数据的MIME类型,并用这些数据生成MIME消息中的消息体和消息类型。
1.4 编写一个JavaMail发送邮件
1、项目整体结构
2、编写发送邮件的代码
package javamail;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 编写一个Java Mail发送邮件,
* 使用163发送,讲师用的是sina发送的
*/
public class Demo1 {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
Properties props = new Properties();
//指定sun公司官方的认证
props.setProperty("mail.smtp.auth", "true");
//指定使用的协议
props.setProperty("mail.transport.protocol", "smtp");
Session session = Session.getInstance(props);
//设置debug调试信息
session.setDebug(true);
Message msg = new MimeMessage(session);
msg.setSubject("这是一个测试程序...");
msg.setText("你好!这是我的第一个JavaMail程序-->卡卡罗特");
msg.setFrom(new InternetAddress("***********@163.com"));
//邮件传送器
Transport transport = session.getTransport();
//连接新浪邮件的服务器,同时提供用户名和密码
transport.connect("smtp.163.com", 25, "***********",
"abc123");
//设置要发送的邮件和接收地址
transport.sendMessage(msg, new Address[]
{new InternetAddress("***********@qq.com")});
transport.close();
}
}
注意:上述加粗的两行中,标红的代码一定要一致才可以发送成功。
参考书籍《Java邮件开发详解》