使用Spring的JAVA Mail支持簡化郵件發(fā)送功能
閑來無事,翻看《Spring in Action》,發(fā)現(xiàn)Spring集成了對JAVA Mail的支持,有點小激動的看了一遍,嗯,話說真的簡單了很多。
Spring的郵件發(fā)送的核心是MailSender接口,在Spring3.0中提供了一個實現(xiàn)類JavaMailSenderImpl,這個類是發(fā)送郵件的核心類??梢酝ㄟ^在配置文件中配置使用,當然也可以自己硬編碼到代碼中(方便起見,下面的演示代碼都是硬編碼到代碼中,省得配置麻煩)。
Spring提供的郵件發(fā)送不僅支持簡單郵件的發(fā)送、添加附件,而且還可以使用velocity模板控制頁面樣式(應該也支持freemarker)。
首先對加入相應Spring jar包和Java Mail 的jar包。
我們首先得聲明一個MailSender對象,因為MailSender對象只有兩個重載的send(...)方法,顯得有些簡陋,我們建議選用JavaMailSender接口,或者干脆直接使用實現(xiàn)類,JavaMailSenderImpl。筆者是使用的JavaMailSenderImpl對象,功能豐富。
聲明JavaMailSenderImpl對象,并在構(gòu)造函數(shù)中初始化(當然也可以使用IoC容器初始化):
public class SpringMailSender
{
//
Spring的郵件工具類,實現(xiàn)了MailSender和JavaMailSender接口
private JavaMailSenderImpl
mailSender;
public SpringMailSender()
{
//
初始化JavaMailSenderImpl,當然推薦在spring配置文件中配置,這里是為了簡單
mailSender
= new JavaMailSenderImpl();
//
設(shè)置參數(shù)
mailSender.setHost("smtp.qq.com");
mailSender.setUsername("mosaic@qq.com");
mailSender.setPassword("asterisks");
...
得到了MailSender對象之后,就可以發(fā)送郵件了,下面是示例代碼,沒有封裝,僅供參考。
1、發(fā)送簡單郵件
/**
*
簡單郵件發(fā)送
*
*/
public void simpleSend()
{
//
構(gòu)建簡單郵件對象,見名知意
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,支付更加復雜的郵件格式和內(nèi)容
MimeMessage
msg = mailSender.createMimeMessage();
//創(chuàng)建MimeMessageHelper對象,處理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");
//第二個參數(shù)true,表示text的內(nèi)容為html,然后注意<img/>標簽,src='cid:file','cid'是contentId的縮寫,'file'是一個標記,需要在后面的代碼中調(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模板確定郵件風格
使用Velocity模板,需要Velocity的jar包,可以在官方網(wǎng)站下載,并加入ClassPath,然后需要聲明一個VelocityEngine對象,具體的參考下面代碼,這是筆者第一次使用Velocity,不甚了解,言多有失,望見諒。
聲明一個VelocityEngine對象,并在構(gòu)造函數(shù)中初始化(IoC is optional)
...
private VelocityEngine
velocityEngine;
public SpringMailSender()
{
...
//
Velocity的參數(shù),通過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();
}
}
簡單的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>
開起來貌似很容易理解,只是普通的Html文件,使用了一些${placeholder}作為占位符。
Java要做的,就是加載模板,并將相應的值插入到占位符當中。
/**
*
使用Velocity模板發(fā)送郵件
*
*
@throws MessagingException
*/
public
void templateSend() throws MessagingException {
//
聲明Map對象,并填入用來填充模板文件的鍵值對
Map<String,
String> model = new HashMap<String,
String>();
model.put("user",
"MZULE");
model.put("content",
"Hello");
//
Spring提供的VelocityEngineUtils將模板進行數(shù)據(jù)填充,并轉(zhuǎn)換成普通的String對象
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可謂是大大簡化了郵件的發(fā)送步驟,雖然我們自己封裝可能實現(xiàn)起來并不復雜,但是,有現(xiàn)成的有何必要重新造輪子呢?(當然造輪子可以學到很多)
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- 基于JavaMail實現(xiàn)簡單郵件發(fā)送
- Simple Java Mail郵件發(fā)送實現(xiàn)過程解析
- Spring Boot利用Java Mail實現(xiàn)郵件發(fā)送
- JavaMail郵件發(fā)送機制詳解
- 基于JavaMail實現(xiàn)郵件發(fā)送
- 基于JavaMail的Java實現(xiàn)復雜郵件發(fā)送功能
- 基于JavaMail的Java實現(xiàn)簡單郵件發(fā)送功能
- Java HtmlEmail 郵件發(fā)送的簡單實現(xiàn)代碼
- JavaMail實現(xiàn)郵件發(fā)送的方法
- JavaMail實現(xiàn)簡單郵件發(fā)送
相關(guān)文章
java8 LocalDate LocalDateTime等時間類用法實例分析
這篇文章主要介紹了java8 LocalDate LocalDateTime等時間類用法,結(jié)合具體實例形式分析了LocalDate、LocalTime、LocalDateTime等日期時間相關(guān)類的功能與具體使用技巧,需要的朋友可以參考下2017-04-04
Mybatis調(diào)用MySQL存儲過程的簡單實現(xiàn)
本篇文章主要介紹了Mybatis調(diào)用MySQL存儲過程的簡單實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04
Mybatis-Plus將字段設(shè)置為null解決方法
MyBatis-Plus是一個MyBatis的增強工具,在MyBatis的基礎(chǔ)上只做增 強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus將字段設(shè)置為null的解決方法的相關(guān)資料,需要的朋友可以參考下2023-04-04
解決Request獲取請求數(shù)據(jù)中文亂碼問題
這篇文章主要介紹了Request獲取請求數(shù)據(jù)中文亂碼問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Java 客戶端向服務端上傳mp3文件數(shù)據(jù)的實例代碼
這篇文章主要介紹了Java 客戶端向服務端上傳mp3文件數(shù)據(jù)的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09
全網(wǎng)最全SpringBoot集成swagger的詳細教程
swagger是當下比較流行的實時接口文文檔生成工具,swagger分為swagger2?和swagger3兩個常用版本,二者區(qū)別不是很大,主要對于依賴和注解進行了優(yōu)化,swagger2需要引入2個jar包,swagger3只需要一個,用起來沒有什么大的區(qū)別,本文給大家詳細介紹,感興趣的朋友一起看看吧2022-08-08

