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ū)別呢?圖片資源是放在郵件正文中的,即一打開郵件,就能看到圖片。但是一般來說,不建議使用這種方式,一些公司會(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í)際開發(fā)中,第一種和第三種都不是使用最多的郵件發(fā)送方案。因?yàn)檎碚f,郵件的內(nèi)容都是比較的豐富的,所以大部分郵件都是通過 HTML 來呈現(xiàn)的,
如果直接拼接 HTML 字符串,這樣以后不好維護(hù),為了解決這個(gè)問題,一般郵件發(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)文章
jpa實(shí)體@ManyToOne @OneToMany無限遞歸方式
這篇文章主要介紹了jpa實(shí)體@ManyToOne @OneToMany無限遞歸方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Windows下Java調(diào)用OCR進(jìn)行圖片識(shí)別
這篇文章主要為大家詳細(xì)介紹了Windows下Java調(diào)用OCR進(jìn)行圖片識(shí)別,通過Tesseract-OCR對(duì)圖片進(jìn)行識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹的真正理解
這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用
適配器模式的主要作用是在新接口和老接口之間進(jìn)行適配,通過將一個(gè)類的接口轉(zhuǎn)換成客戶期望的另一個(gè)接口,讓原本不兼容的接口可以合作無間,本文以實(shí)例解析Java設(shè)計(jì)模式編程中的適配器模式使用,需要的朋友可以參考下2016-05-05
關(guān)于微服務(wù)使用Dubbo設(shè)置的端口和server.port的區(qū)別
這篇文章主要介紹了關(guān)于微服務(wù)使用Dubbo設(shè)置的端口和server.port的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
簡(jiǎn)單學(xué)習(xí)Java+MongoDB
本文給大家介紹的是如何簡(jiǎn)單的使用java+MongoDB實(shí)現(xiàn)數(shù)據(jù)調(diào)用的問題,非常的實(shí)用,有需要的小伙伴可以參考下2016-03-03

