Spring Boot 2發送郵件手把手圖文教程

本文基於:Spring Boot 2.1.3,理論支持Spring Boot 2.x所有版本。

最近有童鞋問到筆者如何用Spring Boot發送郵件,故而整理下Spring Boot發送郵件的各種姿勢。

說到郵件放鬆,相信大家對Spring Framework提供的接口 JavaMailSender 都不陌生。那麼Spring Boot是否有開箱即用的郵件發送呢?

答案是肯定的。Spring Boot為發送郵件提供了starter:spring-boot-starter-mail 。

本文詳細探討如何用Spring Boot發送郵件。

一、郵箱配置

以126郵箱為例:

1 開啟SMTP服務

Spring Boot 2發送郵件手把手圖文教程

Spring Boot 2發送郵件手把手圖文教程

二、編碼

2.1 準備工作

1 加依賴


<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-mail/<artifactid>
/<dependency>

2 寫配置


spring:
mail:
host: smtp.126.com
username: [email protected]
password: 上面設置的授權碼

2.2 發送簡單郵件


public String simple() {
SimpleMailMessage message = new SimpleMailMessage();
// 發件人郵箱

message.setFrom(this.mailProperties.getUsername());
// 收信人郵箱
message.setTo("[email protected]");
// 郵件主題
message.setSubject("簡單郵件測試");
// 郵件內容
message.setText("簡單郵件測試");
this.javaMailSender.send(message);
return "success";
}

結果類似下圖:

Spring Boot 2發送郵件手把手圖文教程

2.3 發送HTML郵件

簡單郵件是沒有樣式的,很多時候,我們希望發送的郵件內容帶有樣式,此時可發送HTML郵件。


public String html() throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message);
messageHelper.setFrom(this.mailProperties.getUsername());
messageHelper.setTo("[email protected]");
messageHelper.setSubject("HTML內容郵件測試");
// 第二個參數表示是否html,設為true
messageHelper.setText("

HTML內容..

", true);
this.javaMailSender.send(message);
return "success";
}

結果類似下圖:

Spring Boot 2發送郵件手把手圖文教程

2.4 發送帶附件的郵件

很多場景下,需要為郵件插入附件,此時該怎麼辦呢?繼續上代碼——


@GetMapping("/attach")
public String attach() throws MessagingException {
MimeMessage message = this.javaMailSender.createMimeMessage();
// 第二個參數表示是否開啟multipart模式
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(this.mailProperties.getUsername());
messageHelper.setTo("[email protected]");
messageHelper.setSubject("帶附件的郵件測試");
// 第二個參數表示是否html,設為true
messageHelper.setText("

HTML內容..

", true);
messageHelper.addAttachment("附件名稱",
new ClassPathResource("wx.jpg"));
this.javaMailSender.send(message);
return "success";
}

結果類似下圖:

Spring Boot 2發送郵件手把手圖文教程

2.5 發送帶內聯附件的郵件

附件 + HTML基本能滿足日常工作中多數需求。但如果能將附件內聯在郵件內容中,那麼體驗就更好啦!如何實現附件的內聯呢?


@GetMapping("/inline-attach")
public String inlineAttach() throws MessagingException {
MimeMessage message = this.javaMailSender.createMimeMessage();
// 第二個參數表示是否開啟multipart模式
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(this.mailProperties.getUsername());
messageHelper.setTo("[email protected]");
messageHelper.setSubject("內聯附件的郵件測試");
// 第二個參數表示是否html,設為true
messageHelper.setText("

HTML內容..

", true);
messageHelper.addInline("attach", new ClassPathResource("wx.jpg"));
this.javaMailSender.send(message);
return "success";
}

由代碼可知,只需在想要內聯的地方使用 cid:xx 引用內聯附件,然後用 addInline(xx, file)指定附件即可。兩處的 xx 必須一致。

結果類似下圖:

Spring Boot 2發送郵件手把手圖文教程

2.6 發送基於Freemarker模板的郵件

上面的例子中,郵件內容是直接以字符串體現的,這通常不適合生產,因為實際項目中郵件往往帶有變量。此時,可考慮使用Freemarker模板(或者其他模板,Spring Boot 2.x默認支持Freemarker、Groovy、Thymeleaf、Mustache四種模板引擎,也可根據需求使用其他模板引擎)。

創建Freemarker模板文件mail.ftl,並將其存放在resources/templates/ 目錄中


親愛的${username}, 歡迎關注${event}


編碼:


@GetMapping("/freemarker")
public String freemarker() throws MessagingException, IOException, TemplateException {
MimeMessage message = this.javaMailSender.createMimeMessage();
// 第二個參數表示是否開啟multipart模式
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);
messageHelper.setFrom(this.mailProperties.getUsername());
messageHelper.setTo("[email protected]");
messageHelper.setSubject("基於freemarker模板的郵件測試");
Map<string> model = new HashMap<>();
model.put("username", "itmuch");

model.put("event", "IT牧場大事件");
String content = FreeMarkerTemplateUtils.processTemplateIntoString(
this.freemarkerConfiguration.getTemplate("mail.ftl"), model);
// 第二個參數表示是否html,設為true
messageHelper.setText(content, true);
this.javaMailSender.send(message);
return "success";
}
/<string>

此時,結果類似下圖:

Spring Boot 2發送郵件手把手圖文教程

三、配套代碼

•GitHub[1]

•Gitee[2]

乾貨分享

最近將個人學習筆記整理成冊,使用PDF分享。關注我,回覆如下代碼,即可獲得百度盤地址,無套路領取!

•001:《Java併發與高併發解決方案》學習筆記;

•002:《深入JVM內核——原理、診斷與優化》學習筆記;

•003:《Java面試寶典》

•004:《Docker開源書》

•005:《Kubernetes開源書》

•006:《DDD速成(領域驅動設計速成)》

References

[1] GitHub: https://github.com/eacdy/spring-boot-study/tree/master/spring-boot-mail

[2] Gitee: https://gitee.com/itmuch/spring-boot-study/tree/master/spring-boot-mail


分享到:


相關文章: