<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
此前需要开通使用邮箱的厂商的服务,在application.yml文件上加入
spring:
mail:
host: smtp.qq.com
username: xxx@qq.com
password: xxx
protocol: smtps
properties:
mail:
smtp:
ssl:
enable: true
需要先编辑好一个html文件,使用thymeleaf来编辑处理
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>邮箱验证</title>
<meta charset="utf-8">
</head>
<body>
<!-- 头部 -->
<div style="padding: 10px; background-color: #393D49;">
<h2 style="color: #FFFFFF; margin: 0;">Animal Lovers Forum</h2>
</div>
<!-- 内容 -->
<div style="padding-top: 10px; padding-bottom: 10px;">
<div style="background-color: snow; padding: 20px;">
<div>
<h3>尊敬的用户:您好!</h3>
<p>说明:您现在正在进行敏感操作,为了确保您的账户安全,我们将通过邮件对您进行身份验证。</p>
<p th:text="${message}"></p>
<div>
<h4>本次的验证码为:</h4>
<div style="background-color: #EBEEF5; padding: 10px;">
<h3 th:text="${code}"></h3>
</div>
<h4>有效期为5分钟</h4>
</div>
<p style="margin-top: 15px;">发件人:</p>
</div>
</div>
</div>
<!-- 页底 -->
<div style="padding: 10px; text-align: center; background-color: #2F4056;">
<p style="margin: 0; color: #FFFFFF;">Copyright © 2023 <a href="https://www.ikate.xyz/" style="color: #FFFFFF;"></a> All Rights Reserved.</p>
</div>
</body>
</html>
发送服务类
@Service
public class SendServiceImpl implements SendService {
private static final Logger logger = LoggerFactory.getLogger(SendServiceImpl.class);
@Resource
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String from;
@Resource
TemplateEngine templateEngine;
@Override
public boolean sendRegisterMail(String mail, String account) {
Context context = new Context();
String key = "register_"+ mail + account;
String code = VerifyCodeUtil.generator();
context.setVariable("message", Constant.REGISTER_VERIFY_NOTICE);
context.setVariable("code",code);
context.setVariable("username","qwe");
String content = templateEngine.process("register",context);
try {
MimeMessageHelper mimeMessageHelper = getMimeMessageHelper(mail,content, Constant.REGISTER_VERIFY_SUBJECT);
redisService.setString(key, code,Constant.REGISTER_VERIFY_CODE_EXPIRE);
new Thread(()-> {
try {
mailSender.send(mimeMessageHelper.getMimeMessage());
}
catch (MailException mailException){
mailException.printStackTrace();
}
}).start();
return true;
} catch (Exception e) {
e.printStackTrace();
redisService.delete(key);
}
return false;
}
private MimeMessageHelper getMimeMessageHelper(String to, String content, String subject) throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message);
mimeMessageHelper.setFrom(from);
mimeMessageHelper.setTo(to);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(content,true);
return mimeMessageHelper;
}
}