使用Spring的JAVA Mail支持簡(jiǎn)化郵件發(fā)送功能
閑來(lái)無(wú)事,翻看《Spring in Action》,發(fā)現(xiàn)Spring集成了對(duì)JAVA Mail的支持,有點(diǎn)小激動(dòng)的看了一遍,嗯,話說(shuō)真的簡(jiǎn)單了很多。
Spring的郵件發(fā)送的核心是MailSender接口,在Spring3.0中提供了一個(gè)實(shí)現(xiàn)類JavaMailSenderImpl,這個(gè)類是發(fā)送郵件的核心類。可以通過(guò)在配置文件中配置使用,當(dāng)然也可以自己硬編碼到代碼中(方便起見(jiàn),下面的演示代碼都是硬編碼到代碼中,省得配置麻煩)。
Spring提供的郵件發(fā)送不僅支持簡(jiǎn)單郵件的發(fā)送、添加附件,而且還可以使用velocity模板控制頁(yè)面樣式(應(yīng)該也支持freemarker)。
首先對(duì)加入相應(yīng)Spring jar包和Java Mail 的jar包。
我們首先得聲明一個(gè)MailSender對(duì)象,因?yàn)镸ailSender對(duì)象只有兩個(gè)重載的send(...)方法,顯得有些簡(jiǎn)陋,我們建議選用JavaMailSender接口,或者干脆直接使用實(shí)現(xiàn)類,JavaMailSenderImpl。筆者是使用的JavaMailSenderImpl對(duì)象,功能豐富。
聲明JavaMailSenderImpl對(duì)象,并在構(gòu)造函數(shù)中初始化(當(dāng)然也可以使用IoC容器初始化):
public class SpringMailSender
{
//
Spring的郵件工具類,實(shí)現(xiàn)了MailSender和JavaMailSender接口
private JavaMailSenderImpl
mailSender;
public SpringMailSender()
{
//
初始化JavaMailSenderImpl,當(dāng)然推薦在spring配置文件中配置,這里是為了簡(jiǎn)單
mailSender
= new JavaMailSenderImpl();
//
設(shè)置參數(shù)
mailSender.setHost("smtp.qq.com");
mailSender.setUsername("mosaic@qq.com");
mailSender.setPassword("asterisks");
...
得到了MailSender對(duì)象之后,就可以發(fā)送郵件了,下面是示例代碼,沒(méi)有封裝,僅供參考。
1、發(fā)送簡(jiǎn)單郵件
/**
*
簡(jiǎn)單郵件發(fā)送
*
*/
public void simpleSend()
{
//
構(gòu)建簡(jiǎn)單郵件對(duì)象,見(jiàn)名知意
SimpleMailMessage
smm = new SimpleMailMessage();
//
設(shè)定郵件參數(shù)
smm.setFrom(mailSender.getUsername());
smm.setTo("mosaic@126.com");
smm.setSubject("Hello
world");
smm.setText("Hello
world via spring mail sender");
//
發(fā)送郵件
mailSender.send(smm);
}
2、發(fā)送帶附件的郵件
/**
*
帶附件的郵件發(fā)送
*
*
@throws MessagingException
*/
public void attachedSend()
throws MessagingException
{
//使用JavaMail的MimeMessage,支付更加復(fù)雜的郵件格式和內(nèi)容
MimeMessage
msg = mailSender.createMimeMessage();
//創(chuàng)建MimeMessageHelper對(duì)象,處理MimeMessage的輔助類
MimeMessageHelper
helper = new MimeMessageHelper(msg,
true);
//使用輔助類MimeMessage設(shè)定參數(shù)
helper.setFrom(mailSender.getUsername());
helper.setTo("mosaic@126.com");
helper.setSubject("Hello
Attachment");
helper.setText("This
is a mail with attachment");
//加載文件資源,作為附件
ClassPathResource
file = new ClassPathResource(
"Chrysanthemum.jpg");
//加入附件
helper.addAttachment("attachment.jpg",
file);
//發(fā)送郵件
mailSender.send(msg);
}
3、發(fā)送富文本郵件
/**發(fā)送富文本郵件
*
@throws MessagingException
*/
public void richContentSend()
throws MessagingException
{
MimeMessage
msg = mailSender.createMimeMessage();
MimeMessageHelper
helper = new MimeMessageHelper(msg,
true);
helper.setFrom(mailSender.getUsername());
helper.setTo("mosaic@126.com");
helper.setSubject("Rich
content mail");
//第二個(gè)參數(shù)true,表示text的內(nèi)容為html,然后注意<img/>標(biāo)簽,src='cid:file','cid'是contentId的縮寫(xiě),'file'是一個(gè)標(biāo)記,需要在后面的代碼中調(diào)用MimeMessageHelper的addInline方法替代成文件
helper.setText(
"<body><p>Hello
Html Email</p><img src='cid:file'/></body>",
true);
FileSystemResource
file = new FileSystemResource(
"C:\\Users\\Public\\Pictures\\Sample
Pictures\\Chrysanthemum.jpg");
helper.addInline("file",
file);
mailSender.send(msg);
}
4、使用Velocity模板確定郵件風(fēng)格
使用Velocity模板,需要Velocity的jar包,可以在官方網(wǎng)站下載,并加入ClassPath,然后需要聲明一個(gè)VelocityEngine對(duì)象,具體的參考下面代碼,這是筆者第一次使用Velocity,不甚了解,言多有失,望見(jiàn)諒。
聲明一個(gè)VelocityEngine對(duì)象,并在構(gòu)造函數(shù)中初始化(IoC is optional)
...
private VelocityEngine
velocityEngine;
public SpringMailSender()
{
...
//
Velocity的參數(shù),通過(guò)VelocityEngineFactoryBean創(chuàng)建VelocityEngine,也是推薦在配置文件中配置的
Properties
props = System.getProperties();
props.put("resource.loader",
"class");
props
.put("class.resource.loader.class",
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
VelocityEngineFactoryBean
v = new VelocityEngineFactoryBean();
v.setVelocityProperties(props);
try {
velocityEngine
= v.createVelocityEngine();
}
catch (VelocityException
e) {
e.printStackTrace();
}
catch (IOException
e) {
e.printStackTrace();
}
}
簡(jiǎn)單的Velocity模板文件(index.vm):
<html>
<head>
<style type="text/css">
h4{
color:red;
background:#efefef;
}
</style>
</head>
<body>
<h4>${user}
</h4>
<p><p>
<i>${content}</i>
</body>
</html>
開(kāi)起來(lái)貌似很容易理解,只是普通的Html文件,使用了一些${placeholder}作為占位符。
Java要做的,就是加載模板,并將相應(yīng)的值插入到占位符當(dāng)中。
/**
*
使用Velocity模板發(fā)送郵件
*
*
@throws MessagingException
*/
public
void templateSend() throws MessagingException {
//
聲明Map對(duì)象,并填入用來(lái)填充模板文件的鍵值對(duì)
Map<String,
String> model = new HashMap<String,
String>();
model.put("user",
"MZULE");
model.put("content",
"Hello");
//
Spring提供的VelocityEngineUtils將模板進(jìn)行數(shù)據(jù)填充,并轉(zhuǎn)換成普通的String對(duì)象
String
emailText = VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine,
"index.vm", model);
//
和上面一樣的發(fā)送郵件的工作
MimeMessage
msg = mailSender.createMimeMessage();
MimeMessageHelper
helper = new MimeMessageHelper(msg, true);
helper.setFrom(mailSender.getUsername());
helper.setTo("mosaic@126.com");
helper.setSubject("Rich
content mail");
helper.setText(emailText,
true);
mailSender.send(msg);
}
Spring可謂是大大簡(jiǎn)化了郵件的發(fā)送步驟,雖然我們自己封裝可能實(shí)現(xiàn)起來(lái)并不復(fù)雜,但是,有現(xiàn)成的有何必要重新造輪子呢?(當(dāng)然造輪子可以學(xué)到很多)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 基于JavaMail實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送
- Simple Java Mail郵件發(fā)送實(shí)現(xiàn)過(guò)程解析
- Spring Boot利用Java Mail實(shí)現(xiàn)郵件發(fā)送
- JavaMail郵件發(fā)送機(jī)制詳解
- 基于JavaMail實(shí)現(xiàn)郵件發(fā)送
- 基于JavaMail的Java實(shí)現(xiàn)復(fù)雜郵件發(fā)送功能
- 基于JavaMail的Java實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送功能
- Java HtmlEmail 郵件發(fā)送的簡(jiǎn)單實(shí)現(xiàn)代碼
- JavaMail實(shí)現(xiàn)郵件發(fā)送的方法
- JavaMail實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送
相關(guān)文章
Java使用System.currentTimeMillis()方法計(jì)算程序運(yùn)行時(shí)間的示例代碼
System.currentTimeMillis() 方法的返回類型為 long ,表示毫秒為單位的當(dāng)前時(shí)間,文中通過(guò)示例代碼介紹了計(jì)算 String 類型與 StringBuilder 類型拼接字符串的耗時(shí)情況,對(duì)Java計(jì)算程序運(yùn)行時(shí)間相關(guān)知識(shí)感興趣的朋友一起看看吧2022-03-03
使用spring連接及操作mongodb3.0實(shí)例
這篇文章主要介紹了使用spring連接及操作mongodb3.0實(shí)例,詳細(xì)的介紹了使用spring的情況下,在java中簡(jiǎn)單操作mongodb。有興趣的可以了解一下。2016-12-12
java+SQL server2008學(xué)生信息管理系統(tǒng)源碼
這篇文章主要為大家詳細(xì)介紹了java+SQL server2008學(xué)生信息管理系統(tǒng)源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
MyBatis類型處理器TypeHandler的作用及說(shuō)明
這篇文章主要介紹了MyBatis類型處理器TypeHandler的作用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Data Source與數(shù)據(jù)庫(kù)連接池簡(jiǎn)介(JDBC簡(jiǎn)介)
DataSource是作為DriverManager的替代品而推出的,DataSource 對(duì)象是獲取連接的首選方法,這篇文章主要介紹了Data Source與數(shù)據(jù)庫(kù)連接池簡(jiǎn)介(JDBC簡(jiǎn)介),需要的朋友可以參考下2022-11-11
Java實(shí)現(xiàn)PDF在線預(yù)覽功能(四種方式)
這篇文章主要介紹了Java實(shí)現(xiàn)PDF在線預(yù)覽功能的四種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
詳解SpringBoot時(shí)間參數(shù)處理完整解決方案
這篇文章主要介紹了詳解SpringBoot時(shí)間參數(shù)處理完整解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Mybatis往Mapper.xml文件中傳遞多個(gè)參數(shù)問(wèn)題
這篇文章主要介紹了Mybatis往Mapper.xml文件中傳遞多個(gè)參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
如何在SpringBoot+Freemarker中獲取項(xiàng)目根目錄
這篇文章主要介紹了如何在SpringBoot+Freemarker中獲取項(xiàng)目根目錄的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10

