先上发送成功效果图~~
一. 添加邮箱依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.3.2.RELEASE</version>
</dependency>
ps: <version>为自己使用的springboot版本
添加thymeleaf依赖:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
二. 开启发送邮箱源的发送协议
以163邮箱为例(QQ邮箱也可以),开启IMAP/SMTP服务和POP3/SMTP服务
三.配置yml
在配置文件中添加:
spring:
mail:
protocol: smtps
host: smtp.163.com
username: *****@163.com
password: ***********
port: 465
default-encoding: UTF-8
ps: username为发送邮箱者的邮箱名
password为开启IMAP/SMTP服务时的密码
四. 编写业务代码
1.controller
private MailService mailService;
@GetMapping("/sendEmail/{email}")
public void SendEmail(@PathVariable String email){
mailService.sendEmailCode(email);
}
2.Service
public interface MailService {
void sendEmailCode(String email);
}
3.ServiceImpl
@Service
public class MailServiceImpl extends ServiceImpl<LoginMapper,PUser> implements MailService {
@Value("${spring.mail.username}")
private String mailUserName;
@Resource
private JavaMailSender javaMailSender;
@Resource
private TemplateEngine templateEngine;
@Override
public void sendEmailCode(String email) {
// 创建邮件对象
MimeMessage mimeMailMessage=javaMailSender.createMimeMessage();
try {
MimeMessageHelper message = new MimeMessageHelper(mimeMailMessage, true);
// 设置邮件主题
message.setSubject("忘记密码");
// 随机生成5位数验证码
String code = RandomUtil.randomNumbers(5);
// 设置邮箱接收者
message.setTo(email);
// 设置邮件的发送者
message.setFrom(mailUserName);
// 设置邮件发送时间
message.setSentDate(new Date());
// 创建上下文环境(thymeleaf模板)
Context context= new Context();
context.setVariable("email",email);
context.setVariable("code",code);
// 邮件页面
String text =templateEngine.process("wj.html",context);
message.setText(text,true);
QueryWrapper<PUser> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("email",email);
PUser one=getOne(queryWrapper);
// 将验证码保存到数据库中
one.setCode(code);
update(one,queryWrapper);
}catch (MessagingException e){
e.printStackTrace();
}
javaMailSender.send(mimeMailMessage);
}
}
ps:导入的Context为:
import org.thymeleaf.context.Context;
4.发送的邮箱页面样式(thymeleaf)
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>邮件</title>
</head>
<body>
<div>忘记密码</div>
<div>您的注册信息是:
<table border="1">
<tr>
<td>邮箱</td>
<td th:text="${email}"></td>
</tr>
</table>
</div>
<br>
您的验证码为:<br/>
<td th:text="${code}"></td>
<br/>
<br/>
感谢您的访问,祝您说愉快!<br>
</body>
</html>