SpringBoot?JavaMailSender發(fā)送郵件功能(實(shí)例詳解)

JavaMailSender是什么
JavaMailSender是Spring提供的,非常好用的,實(shí)現(xiàn)郵件發(fā)送的接口
在Spring Boot的Starter模塊中也為此提供了自動(dòng)化配置,支持發(fā)送郵件
JavaMailSenderImpl是spring封裝的郵件發(fā)送封裝類,支持普通文本、附件、html。
發(fā)送簡(jiǎn)單郵件
簡(jiǎn)單郵件就是指郵件內(nèi)容是一個(gè)普通的文本文檔
public class MailTest {
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private TemplateEngine templateEngine;
@Test
public void sendSimpleMail() {
SimpleMailMessage message = new SimpleMailMessage(); // 構(gòu)建一個(gè)郵件對(duì)象
message.setSubject("郵件主題:這是一封測(cè)試郵件"); // 設(shè)置郵件主題
message.setFrom("xxx@qq.com"); // 設(shè)置郵件發(fā)送者
message.setTo("xxx@xx.cn"); // 設(shè)置郵件接收者,可以有多個(gè)接收者
// message.setCc("xx@xx.cn"); // 設(shè)置郵件抄送人,可以有多個(gè)抄送人
// message.setBcc("xx@xx.cn"); // 設(shè)置隱秘抄送人,可以有多個(gè)
message.setSentDate(new Date()); // 設(shè)置郵件發(fā)送日期
String mailMsg = "這是由Springboot發(fā)送的第一封簡(jiǎn)單測(cè)試郵件,發(fā)件人:xx-哈哈";
message.setText(mailMsg); // 設(shè)置郵件的正文
javaMailSender.send(message); // 發(fā)送郵件
}發(fā)送帶附件的郵件
圖片、普通文件,都是支持的
@Test
public void sendAttachFileMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("郵件主題:這是一封測(cè)試帶附件的郵件");
helper.setFrom("xx@qq.com");
helper.setTo("xx@qq.com");
// helper.setCc("xx@xx.cn");
// helper.setBcc("xx@xx.cn");
helper.setSentDate(new Date());
helper.setText("這是由Springboot發(fā)送的第二封帶附件的郵件,發(fā)件人:x-哈哈");
File file = new File("/Users/xx/朱x/朱x.jpg");
helper.addAttachment("xx.jpg", file);
javaMailSender.send(mimeMessage);
}發(fā)送帶圖片資源的郵件
圖片資源和附件有什么區(qū)別呢?圖片資源是放在郵件正文中的,即一打開(kāi)郵件,就能看到圖片。但是一般來(lái)說(shuō),不建議使用這種方式,一些公司會(huì)對(duì)郵件內(nèi)容的大小有限制(因?yàn)檫@種方式是將圖片一起發(fā)送的)。
@Test
public void sendImgResMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("郵件主題:這是一封測(cè)試帶圖片資源的郵件");
helper.setFrom("xx@qq.com");
helper.setTo("xx@qq.com");
helper.setSentDate(new Date());
helper.setText("<p>hello 大家好,這是一封測(cè)試郵件,這封郵件包含兩種圖片,分別如下</p><p>第一張圖片:</p><img src='cid:p01'/><p>第二張圖片:</p><img src='cid:p02'/>", true);
helper.addInline("p01", new FileSystemResource(new File("/Users/xx/朱x/xx.jpg")));
helper.addInline("p02", new FileSystemResource(new File("/Users/zhupeng/xx/WechatIMG47.jpg")));
javaMailSender.send(mimeMessage);
}使用 Freemarker 作郵件模板
在公司實(shí)際開(kāi)發(fā)中,第一種和第三種都不是使用最多的郵件發(fā)送方案。因?yàn)檎?lái)說(shuō),郵件的內(nèi)容都是比較的豐富的,所以大部分郵件都是通過(guò) HTML 來(lái)呈現(xiàn)的,
如果直接拼接 HTML 字符串,這樣以后不好維護(hù),為了解決這個(gè)問(wèn)題,一般郵件發(fā)送,都會(huì)有相應(yīng)的郵件模板。
最具代表性的兩個(gè)模板就是 Freemarker 模板和 Thyemeleaf 模板了
@Test
public void sendFreemarkerMail() throws MessagingException, IOException, TemplateException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("郵件主題:這是一封Freemarker渲染的郵件");
helper.setFrom("xx@qq.com");
helper.setTo("xx@qq.com");
helper.setSentDate(new Date());
// 構(gòu)建 Freemarker 的基本配置
Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
configuration.setClassLoaderForTemplateLoading(MailTest.class.getClassLoader(), "templates");
Template template = configuration.getTemplate("mail_freemarker.ftl");
// 模板渲染,渲染的結(jié)果將被保存到 out 中 ,將out 中的 html 字符串發(fā)送即可
StringWriter out = new StringWriter();
template.process(new User(1001, "xx", 10000.00), out);
helper.setText(out.toString(), true);
javaMailSender.send(mimeMessage);
}使用 Thymeleaf 作郵件模板,帶附件+圖片
public void sendThymeleafMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setSubject("郵件主題:這是一封Thymeleaf渲染的郵件");
helper.setFrom("xx@qq.com");
helper.setTo("xx@qq.com");
helper.setSentDate(new Date());
File file = new File("/Users/xx/xx/xx.jpg");
helper.addAttachment("xx.jpg", file);
helper.setText("<p>hello 大家好,這是一封測(cè)試郵件,這封郵件包含一種圖片,如下</p><p>第一張圖片:</p><img src='cid:p01'/>", true);
helper.addInline("p01", new FileSystemResource(new File("/Users/xx/朱x/朱x.jpg")));
Context context = new Context();
context.setVariable("userName", "朱xx");
context.setVariable("num", "000001");
context.setVariable("salary", "99999");
String process = templateEngine.process("mail_thymeleaf.html", context);
helper.setText(process, true);
javaMailSender.send(mimeMessage);
}到此這篇關(guān)于SpringBoot JavaMailSender發(fā)送郵件功能的文章就介紹到這了,更多相關(guān)SpringBoot JavaMailSender發(fā)送郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java的application.yml文件的配置全過(guò)程
本文介紹了在Java項(xiàng)目中使用application.yml文件進(jìn)行配置的方法,重點(diǎn)講解了數(shù)據(jù)源、連接池、MyBatis、MyBatis-Plus和Redis的配置,同時(shí),還介紹了如何使用別名來(lái)簡(jiǎn)化MyBatis的配置2026-03-03
Kotlin 基礎(chǔ)教程之注解與java中的注解比較
這篇文章主要介紹了Kotlin 基礎(chǔ)教程之注解與java中的注解比較的相關(guān)資料,需要的朋友可以參考下2017-06-06
淺談SpringCloud的微服務(wù)架構(gòu)組件
這篇文章主要介紹了淺談SpringCloud的微服務(wù)架構(gòu)組件,Spring Cloud根據(jù)分布式服務(wù)協(xié)調(diào)治理的需求成立了許多子項(xiàng)目,每個(gè)項(xiàng)目通過(guò)特定的組件去實(shí)現(xiàn),需要的朋友可以參考下2023-04-04
JDBC的擴(kuò)展知識(shí)點(diǎn)總結(jié)
這篇文章主要介紹了JDBC的擴(kuò)展知識(shí)點(diǎn)總結(jié),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)JDBC的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05
詳解Java利用深度優(yōu)先遍歷解決迷宮問(wèn)題
深度優(yōu)先遍歷:深度優(yōu)先遍歷是圖論中的經(jīng)典算法。其利用了深度優(yōu)先搜索算法可以產(chǎn)生目標(biāo)圖的相應(yīng)拓?fù)渑判虮?,采用拓?fù)渑判虮砜梢越鉀Q很多相關(guān)的圖論問(wèn)題,如最大路徑問(wèn)題等等。本文將利用深度優(yōu)先遍歷解決迷宮問(wèn)題,感興趣的可以了解一下2022-02-02
Java中的構(gòu)造方法(構(gòu)造函數(shù))與普通方法區(qū)別及說(shuō)明
這篇文章主要介紹了Java中的構(gòu)造方法(構(gòu)造函數(shù))與普通方法區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
JAVA生成八位不重復(fù)隨機(jī)數(shù)最快的方法總結(jié)(省時(shí)間省空間)
隨機(jī)數(shù)在實(shí)際中使用很廣泛,比如要隨即生成一個(gè)固定長(zhǎng)度的字符串、數(shù)字,這篇文章主要給大家介紹了關(guān)于JAVA生成八位不重復(fù)隨機(jī)數(shù)最快的方法,文中介紹的方法省時(shí)間省空間,需要的朋友可以參考下2024-03-03
在Android中使用WebView在線查看PDF文件的方法示例
在Android應(yīng)用開(kāi)發(fā)中,有時(shí)我們需要在客戶端展示PDF文件,以便用戶可以閱讀或交互,這篇文章主要介紹了在Android中使用WebView在線查看PDF文件的方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-09-09
java線程之用Thread類創(chuàng)建線程的方法
本篇文章介紹了,Thread類創(chuàng)建線程的方法。需要的朋友參考下2013-05-05

