Springboot 发送邮件
本文以 QQ 邮箱发送为例
邮件发送需要开启邮箱的 pop3 服务
QQ 邮箱开启位置:设置 - 账户 - POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
点击开启会要求进行验证,验证后会得到一个授权码,授权码需写入代码配置中
pom 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.yml 添加邮箱配置信息
spring:
# 邮件发送配置
mail:
# 配置 SMTP 服务器地址
host: smtp.qq.com
# 发送者邮箱
username: xxx@qq.com
# 邮箱授权码
password: xxx
# 端口号465或587
port: 587
# 默认的邮件编码为UTF-8
default-encoding: UTF-8
# 配置SSL 加密工厂
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
debug: true
126邮箱SMTP服务器地址:smtp.126.com,端口号:465或者994
2163邮箱SMTP服务器地址:smtp.163.com,端口号:465或者994
yeah邮箱SMTP服务器地址:smtp.yeah.net,端口号:465或者994
qq邮箱SMTP服务器地址:smtp.qq.com,端口号465或587
发送普通邮件
该方式不支持发送附件、图片、html文本内容
//邮件的发送者
@Value("${spring.mail.username}")
private String from;
/**
* 发送简单邮件
* @return
*/
@Async
public void sendEasyMail() {
// 构建一个邮件对象
SimpleMailMessage message = new SimpleMailMessage();
// 设置邮件主题
message.setSubject("小熊收邮件");
// 设置邮件发送者,这个跟application.yml中设置的要一致
message.setFrom(from);
// 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似
// message.setTo("xxx@qq.com","xxx@qq.com");
message.setTo("xxx@qq.com");
// 设置邮件抄送人,可以有多个抄送人
//message.setCc("xxx@qq.com");
// 设置隐秘抄送人,可以有多个
//message.setBcc("xxx@qq.com");
// 设置邮件发送日期
message.setSentDate(new Date());
// 设置邮件的正文
message.setText("邮件正文内容。。。");
// 发送邮件
javaMailSender.send(message);
}
发送邮件效果
发送复杂邮件
@Autowired
JavaMailSender javaMailSender;
//邮件的发送者
@Value("${spring.mail.username}")
private String from;
/**
* 发送复杂邮件
* @return
*/
@Async
public void sendMimeMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
// true表示构建一个可以带附件的邮件对象
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setSubject("小熊收邮件");
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo("xxx@qq.com");
mimeMessageHelper.setSentDate(new Date());
//带图片、html文本内容
mimeMessageHelper.setText("<p style='color:red;'>邮件正文内容</p><p>图片:</p><img width='200px;' height='200px;' src='cid:p01' />",true);
//添加文件信息
mimeMessageHelper.addInline("p01",new File("C:\\Users\\Administrator\\Desktop\\222.jpg"));
//附件信息
mimeMessageHelper.addAttachment("图片1.png",new File("C:\\Users\\Administrator\\Desktop\\banner.png"));
javaMailSender.send(mimeMessage);
}
发送邮件效果
Freemarker 模板发送邮件
1.pom 添加 freemarker 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2.application.yml 添加 freemarker 配置
spring:
#模板配置
freemarker:
suffix: .ftl
enabled: true
cache: false
charset: UTF-8
content-type: text/html
allow-request-override: false
template-loader-path: classpath:/templates/
check-template-location: true
expose-request-attributes: false
expose-session-attributes: false
expose-spring-macro-helpers: false
3.templates 目录下添加邮件模板 mail.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.layui-table {
width: 100%;
background-color: #fff;
color: #666;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
.layui-table tbody tr:hover, .layui-table thead tr, .layui-table-click, .layui-table-header, .layui-table-hover, .layui-table-mend, .layui-table-patch, .layui-table-tool, .layui-table-total, .layui-table-total tr, .layui-table[lay-even] tr:nth-child(even) {
background-color: #f2f2f2;
}
.layui-table tr {
transition: all .3s;
-webkit-transition: all .3s;
}
.layui-table td, .layui-table th {
position: relative;
padding: 9px 15px;
min-height: 20px;
line-height: 20px;
font-size: 14px;
}
.layui-table td, .layui-table th, .layui-table-col-set, .layui-table-fixed-r, .layui-table-grid-down, .layui-table-header, .layui-table-page, .layui-table-tips-main, .layui-table-tool, .layui-table-total, .layui-table-view, .layui-table[lay-skin=line], .layui-table[lay-skin=row] {
border-width: 1px;
border-style: solid;
border-color: #e6e6e6;
}
.layui-table th {
text-align: left;
font-weight: 400;
}
</style>
</head>
<body style="padding: 20px;">
<p>${title}</p>
<div id="table_html" style="text-align: center;">
<table class="layui-table color-success">
<colgroup>
<col width="100">
<col width="200">
<col width="200">
<col>
</colgroup>
<thead>
<tr>
<th>序号</th>
<th>动漫</th>
<th>主角</th>
</tr>
</thead>
<tbody>
<tr>
<td>${number}</td>
<td>${name}</td>
<td>${author}</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
4.编写邮件发送方法
@Autowired
JavaMailSender javaMailSender;
@Autowired
FreeMarkerConfigurer configurer;
//邮件的发送者
@Value("${spring.mail.username}")
private String from;
/**
* 发送Freemarker模板邮件
* @return
*/
@Async
public void sendFreemarkerMail() throws MessagingException, IOException, TemplateException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
mimeMessageHelper.setSubject("小熊收邮件");
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo("xxx@qq.com");
//取得模板
Template template = configurer.getConfiguration().getTemplate("mail.ftl");
//构建页面数据信息
Map<String,String> map = new HashMap<>();
map.put("title","头部信息");
map.put("number","1");
map.put("name","猫和老鼠");
map.put("author","Tom & Jerry");
//赋值后的模板邮件内容
String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
mimeMessageHelper.setText(text,true);
javaMailSender.send(mimeMessage);
}
邮件发送效果
Thymeleaf 模板发送邮件
1.pom 添加 thymeleaf 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.application.yml 添加 thymeleaf 配置
spring:
# thymeleaf 模块配置
thymeleaf:
prefix: classpath:/templates/
suffix: .html
mode: LEGACYHTML5
encoding: utf-8
# 关闭页面缓存
cache: false
servlet:
content-type: text/html
3.templates 目录下添加邮件模板 mailThymeleaf.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.layui-table {
width: 100%;
background-color: #fff;
color: #666;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
.layui-table tbody tr:hover, .layui-table thead tr, .layui-table-click, .layui-table-header, .layui-table-hover, .layui-table-mend, .layui-table-patch, .layui-table-tool, .layui-table-total, .layui-table-total tr, .layui-table[lay-even] tr:nth-child(even) {
background-color: #f2f2f2;
}
.layui-table tr {
transition: all .3s;
-webkit-transition: all .3s;
}
.layui-table td, .layui-table th {
position: relative;
padding: 9px 15px;
min-height: 20px;
line-height: 20px;
font-size: 14px;
}
.layui-table td, .layui-table th, .layui-table-col-set, .layui-table-fixed-r, .layui-table-grid-down, .layui-table-header, .layui-table-page, .layui-table-tips-main, .layui-table-tool, .layui-table-total, .layui-table-view, .layui-table[lay-skin=line], .layui-table[lay-skin=row] {
border-width: 1px;
border-style: solid;
border-color: #e6e6e6;
}
.layui-table th {
text-align: left;
font-weight: 400;
}
</style>
</head>
<body style="padding: 20px;">
<p th:text="${title}"></p>
<div id="table_html" style="text-align: center;">
<table class="layui-table color-success">
<colgroup>
<col width="100">
<col width="200">
<col width="200">
<col>
</colgroup>
<thead>
<tr>
<th>序号</th>
<th>动漫</th>
<th>主角</th>
</tr>
</thead>
<tbody>
<tr>
<td th:text="${number}"></td>
<td th:text="${name}"></td>
<td th:text="${author}"></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
4.编写邮件发送方法
@Autowired
JavaMailSender javaMailSender;
@Autowired
TemplateEngine templateEngine;
//邮件的发送者
@Value("${spring.mail.username}")
private String from;
/**
* 发送Thymeleaf模板邮件
* @return
*/
@Async
public void sendThymeleafMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
mimeMessageHelper.setSubject("小熊收邮件");
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo("xxx@qq.com");
Context context = new Context();
context.setVariable("title","头部信息");
context.setVariable("number","1");
context.setVariable("name","猫和老鼠");
context.setVariable("author","Tom & Jerry");
String process = templateEngine.process("mailThymeleaf.html", context);
mimeMessageHelper.setText(process,true);
javaMailSender.send(mimeMessage);
}
邮件发送效果