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邮箱为例:
开启SMTP服务
设置/重置客户端授权密码
二、编码
2.1 准备工作
加依赖
1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>写配置
1
2
3
4
5spring:
mail:
host: smtp.126.com
username: eacdy0000@126.com
password: 上面设置的授权码2.2 发送简单邮件
1 | public String simple() { |
结果类似下图:
2.3 发送HTML邮件
简单邮件是没有样式的,很多时候,我们希望发送的邮件内容带有样式,此时可发送HTML邮件。
1 | public String html() throws MessagingException { |
结果类似下图:
2.4 发送带附件的邮件
很多场景下,需要为邮件插入附件,此时该怎么办呢?继续上代码——
1 |
|
结果类似下图:
2.5 发送带内联附件的邮件
附件 + HTML基本能满足日常工作中多数需求。但如果能将附件内联在邮件内容中,那么体验就更好啦!如何实现附件的内联呢?
1 |
|
由代码可知,只需在想要内联的地方使用 cid:xx
引用内联附件,然后用 addInline(xx, file)
指定附件即可。两处的 xx
必须一致。
结果类似下图:
2.6 发送基于Freemarker模板的邮件
上面的例子中,邮件内容是直接以字符串体现的,这通常不适合生产,因为实际项目中邮件往往带有变量。此时,可考虑使用Freemarker模板(或者其他模板,Spring Boot 2.x默认支持Freemarker、Groovy、Thymeleaf、Mustache四种模板引擎,也可根据需求使用其他模板引擎)。
创建Freemarker模板文件
mail.ftl
,并将其存放在resources/templates/
目录中1
<h1>亲爱的${username}, 欢迎关注${event}</h1>
编码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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("511932633@qq.com");
messageHelper.setSubject("基于freemarker模板的邮件测试");
Map<String, Object> 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";
}此时,结果类似下图:
评论系统未开启,无法评论!