一、Java Mail API简介
Java Mail API是SUN为Java开发者提供的公用的Mail API框架,他支持各种电子邮件通信协议,如IMAP,POP3,和SMTP,为Java应用程序提供了电子邮件处理的公共接口。 Java Mail API的最主要的类包括以下6种。
Java Mail API是SUN为Java开发者提供的公用的Mail API框架,他支持各种电子邮件通信协议,如IMAP,POP3,和SMTP,为Java应用程序提供了电子邮件处理的公共接口。 Java Mail API的最主要的类包括以下6种。
1、 javax.mail.Session
Session类是定义了一个基本会话,是Java Mail API最高层入口类。所有其他类都是经由这个Session才得以生效。Session对象从java.util.Properties对象中获取信息,如邮件发送服务器、接收邮件协议、发送邮件协议、用户名、密码及整个应用程序中共享的其他信息。
2、 javax.mail.Store
Store类是访问接收服务器上邮件帐户的入口,通过Store类的getFolder()方法,可以访问特定的邮件夹。
3、 javax.mail.Folder
Folder类表示了邮件夹,用于分级组织邮件,通过Folder类可以访问邮件夹中的邮件。
Store类是访问接收服务器上邮件帐户的入口,通过Store类的getFolder()方法,可以访问特定的邮件夹。
3、 javax.mail.Folder
Folder类表示了邮件夹,用于分级组织邮件,通过Folder类可以访问邮件夹中的邮件。
4、 javax.mail.Message
Message代表了电子邮件。Message类封装的邮件信息,提供了访问和设置邮件内容的方法。邮件中包含如下内容:
地址信息,包括发件人地址,收件人地址列表,抄送地址列表和广播地址列表
地址信息,包括发件人地址,收件人地址列表,抄送地址列表和广播地址列表
邮件标题
邮件发送和接收****期
邮件发送和接收****期
邮件具体内容
Message是个抽象类,常用的子类为javax.mail.internet.MimeMessage。MimeMessage能支持MIME类型电子邮件信息。
Message是个抽象类,常用的子类为javax.mail.internet.MimeMessage。MimeMessage能支持MIME类型电子邮件信息。
5、 javax.mail.Address
Address代表了邮件地址,与Message一样,也是抽象类。常用的子类为javax.mail.internet.InternetAddress类。
6、 javax.mail.Transport
Transport类根据指定的邮件发送协议(通常是SMTP),通过指定的邮件发送服务器来发送邮件。Transport类是抽象类,他提供了一个静态方法send(Message)来发送邮件。
Transport类根据指定的邮件发送协议(通常是SMTP),通过指定的邮件发送服务器来发送邮件。Transport类是抽象类,他提供了一个静态方法send(Message)来发送邮件。
二、JavaMail Demo
1、发送邮件所需的基本信息分装成一个类
public
class
SendMailInfo{
//发送邮件的服务器的IP和端口
private
String
mailServerHost
;
private
String
mailServerPort
;
//邮件发送者的地址
private
String
fromAddress
;
//邮件接受者的地址
private
String
toAddress
;
//登陆邮件发送服务器的用户名和密码
private
String
userName
;
private
String
password
;
//是否需要验证身份验证
private
boolean
validate
=
false
;
//邮件主题
private
String
theme
;
//邮件内容
private
String
content
;
//邮件附件文件名
private
String[]
attachFileNames
;
/**
*
@create
date:2014年9月14日 下午5:01:00
*
@description
:获得邮件发送会话的属性
*
@return
*/
public
Properties getProperties(){
Properties
pro
=
new
Properties();
pro
.put(
"mail.smtp.host"
,
this
.
mailServerHost
);
pro
.put(
"mail.smtp.port"
,
this
.
mailServerPort
);
pro
.put(
"mail.smtp.auth"
,
validate
?
"true"
:
"false"
);
return
pro
;
}
/**
*
@create
date:2014年9月14日 下午5:00:40
*
@description
:判断是否需要验证
*
@return
*/
public
boolean
isValidate(){
return
validate
;
}
}
2、登陆邮件服务器时验证
public
class
MyAuthenticator
extends
Authenticator{
private
String
userName
=
null
;
private
String
password
=
null
;
public
MyAuthenticator() {
super
();
}
public
MyAuthenticator(String
userName
, String
password
) {
super
();
this
.
userName
=
userName
;
this
.
password
=
password
;
}
protected
PasswordAuthentication getPasswordAuthentication(){
return
new
PasswordAuthentication(
userName
,
password
);
}
}
3、简单邮件发送类
public
class
MailSender {
/**
*
@create
date:2014年9月14日 下午5:15:45
*
@description
:以文本格式发送邮件
*
@param
mailInfo
*
@return
*/
public
boolean
sendTextMail(SendMailInfo
mailInfo
){
//判断是否需要身份验证
MyAuthenticator
authenticator
=
null
;
Properties
pro
=
mailInfo
.getProperties();
//如果需要身份验证,则创建一个密码验证
if
(
mailInfo
.isValidate()) {
authenticator
=
new
MyAuthenticator(
mailInfo
.getUserName(),
mailInfo
.getPassword());
}
// 根据会话属性和密码验证器构造一个发送邮件的会话
Session
sendMailSession
= Session.getDefaultInstance(
pro
,
authenticator
);
try
{
//根据session创建一个消息
Message
mailMessage
=
new
MimeMessage(
sendMailSession
);
//创建邮件发送者的地址
Address
from
=
new
InternetAddress(
mailInfo
.getFromAddress());
//设置消息的发送者
mailMessage
. setFrom(
from
);
//创建邮件的接受者地址,并设置到邮件消息中
Address
to
=
new
InternetAddress(
mailInfo
.getToAddress());
mailMessage
. setRecipient(Message.RecipientType.
TO
,
to
);
//设置邮件消息的主题
mailMessage
. setSubject(
mailInfo
.getTheme());
//设置邮件消息发送的时间
mailMessage
. setSentDate(
new
Date(System.currentTimeMillis()));
//设置邮件消息的主要内容
String
mailContent
=
mailInfo
.getContent();
mailMessage
. setText(
mailContent
);
//发送邮件
Transport. send(
mailMessage
);
return
true
;
}
catch
( Exception
e
) {
e
.printStackTrace();
}
return
false
;
}
4、测试方法
public
void
test1(){
MailSender
mailSender
=
new
MailSender();
// 这个类主要是设置邮件
SendMailInfo
mailInfo
=
new
SendMailInfo();
mailInfo
.setMailServerHost(
"smtp.qq.com"
);
mailInfo
.setMailServerPort(
"25"
);
mailInfo
.setValidate(
true
);
mailInfo
.setUserName(
"***@qq.com"
);
mailInfo
.setPassword(
"****"
);
// 您的邮箱密码
mailInfo
.setFromAddress(
"****@qq.com"
);
mailInfo
.setToAddress(
"****@qq.com"
);
mailInfo
.setTheme(
"设置邮箱标题"
);
mailInfo
.setContent(
"设置邮箱内容"
);
System.
out
.println(
mailInfo
);
// 这个类主要来发送邮件
mailSender
.sendTextMail(
mailInfo
);
// 发送文体格式
}
三、Spring发送邮件
1、Spring Mail API
1)MailMessage接口:一个邮件信息个公共接口,允许用户设置邮件信息集的值,不用了解底层信息是简单的文本信息还是复杂的扩展类型。具有两个实现类SimpleMaiMessage和MimeMessageHelper。
2)SimpleMailMessage类:一个简单邮件的模型,包含from、to、subject、text、cc等
3)MimeMailMessage:实现MailMessage的MIME消息
4)MimeMassageHelper:填充MimeMaiMessage的助手类
5)MailSender:定义了发送邮件的策略,实现类JavaMailSenderImpl
6)JavaMailSender:继承MailSender接口,有JavaMailSenderImpl实现类,支持MIME消息参数和回调,
通常使用与MimeMessageHelper类方便创建JavaMail mimemessage,包括附件等。
7)MessagePreparatory:JavaMail MIME消息的回调接口
8)InternetAddressEditor:
直接填充一个InternetAddress属性。
注:
(1):
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型
2、Spring Mail Demo
1)mail.properties
mail.host=
smtp.qq.com
mail.port=
25
mail.username=
****@qq.com
mail.password=
****
mail.from=
****
@qq.com
2)spring.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:p
=
"http://www.springframework.org/schema/p"
xsi:schemaLocation
=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
>
<!-- 加载Properties文件 -->
<
bean
id
=
"configurer"
class
=
"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
>
<
property
name
=
"locations"
>
<
list
>
<
value
>
classpath:mail.properties
</
value
>
</
list
>
</
property
>
</
bean
>
<
bean
id
=
"mailMessage"
class
=
"org.springframework.mail.SimpleMailMessage"
>
<
property
name
=
"from"
>
<
value
>
${mail.from}
</
value
>
</
property
>
<!-- 查看SimpleMailMessage源码还可以注入标题,内容等 -->
</
bean
>
<!-- 申明JavaMailSenderImpl对象 -->
<
bean
id
=
"mailSender"
class
=
"org.springframework.mail.javamail.JavaMailSenderImpl"
>
<
property
name
=
"defaultEncoding"
value
=
"UTF-8"
/>
<
property
name
=
"host"
value
=
"${mail.host}"
/>
<
property
name
=
"port"
value
=
"${mail.port}"
/>
<
property
name
=
"username"
value
=
"${mail.username}"
/>
<
property
name
=
"password"
value
=
"${mail.password}"
/>
<
property
name
=
"javaMailProperties"
>
<
props
>
<!-- 设置认证开关 -->
<
prop
key
=
"mail.smtp.auth"
>
true
</
prop
>
<!-- 启动调试开关 -->
<
prop
key
=
"mail.debug"
>
true
</
prop
>
<!-- 设置发送延时 -->
<
prop
key
=
"mail.smtp.timeout"
>
0
</
prop
>
</
props
>
</
property
>
</
bean
>
</
beans
>
3)send Mail
public
class
SendMailTest {
public
static
void
main(String[]
args
)
throws
MessagingException {
ApplicationContext
ctx
=
new
ClassPathXmlApplicationContext(
"spring.xml"
);
JavaMailSenderImpl
sender
= (JavaMailSenderImpl)
ctx
.getBean(
"mailSender"
);
MimeMessage
mailMessage
=
sender
.createMimeMessage();
MimeMessageHelper
messageHelper
=
new
MimeMessageHelper(
mailMessage
,
true
);
messageHelper
.setFrom(
"****@qq.com"
);
messageHelper
.setTo(
"*****@qq.com"
);
messageHelper
.setSubject(
"测试邮件中嵌套图片!!"
);
// true 表示启动HTML格式的邮件
messageHelper
.setText(
"<html><head></head><body><h1>hello!!spring image html mail</h1>"
+
"<a href=http://www.baidu.com>baidu</a>"
+
"<img src=cid:image/></body></html>"
,
true
);
FileSystemResource
img
=
new
FileSystemResource(
new
File(
"aa.png"
));
messageHelper
.addInline(
"image"
,
img
);
// 跟cid 一致
sender
.send(
mailMessage
);
System.
out
.println(
"邮件发送成功..."
);
}
}