前言:使用邮箱注册时发送邮件获取验证码;找回密码时通过邮箱进行验证;或者其他需要发送邮件的场景。
主要针对在springboot中如何发送QQ邮件
1. 准备工作
进入QQ邮箱页面,点击设置,选择账户
开启IMAP/SMTP服务,开启服务获取QQ邮箱授权码(代码中需要用到)
2.代码部分
在 pom.xml
中添加以下依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
在 application.properties
中添加QQ邮箱的配置
# QQ邮箱配置
spring.mail.host=smtp.qq.com
#发件人QQ邮箱地址
[email protected]
#QQ邮箱授权码
spring.mail.password=第一步获取的授权码
#以下三项不用改动
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
发送邮件的核心代码部分
注意:我写了两种发送邮件的方式:一种发送HTML邮件,一种发送普通文本文件,选一种即可。(还可以发送带附件的邮件哦)
package cn.duli.xianer.controller;
import cn.duli.xianer.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.web.bind.annotation.*;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
@RestController
@RequestMapping("/users")
public class UsersController {
@Autowired
private JavaMailSender javaMailSender;
//这一步是获取application.properties中设置的发件人邮箱地址
@Value("${spring.mail.username}")
private String username;
/**
* 发送HTML邮件
* @param addressee
* @throws MessagingException
*/
//发送HTML邮件(接收前台传过来的参数:addressee 收件人地址)
@RequestMapping("/sendMail")
public void sendMail(String addressee) throws MessagingException {
{
// 生成6位随机数字
Integer code = (int)((Math.random()*9+1)*100000);
System.out.println(code);
//发邮件
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
// 第二个参数true表示使用HTML语言来编写邮件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//发件人邮件地址(上面获取到的,也可以直接填写,string类型)
helper.setFrom(username);
//收件人邮件地址
helper.setTo(addressee);
//邮件主题
helper.setSubject("注册验证码一");
//邮件正文
helper.setText(""<p>您好!您此次注册xxx账号信息的验证码为:<b style='color:orange;'>" + code + "</b>,5分钟内有效,验证码提供给他人可能导致账号被盗,请勿泄露,谨防被骗。</p>", true", true);
javaMailSender.send(mimeMessage);
}
}
/**
* 普通文本邮件
* @param addressee 接收前台传过来的参数:addressee 收件人地址
* @throws MessagingException
*/
@RequestMapping("/sendMail2")
public void sendMail2(String addressee) {
{
//发邮件
SimpleMailMessage message = new SimpleMailMessage();
//发件人邮件地址(上面获取到的,也可以直接填写,string类型)
message.setFrom(username);
//收件人邮件地址
message.setTo(addressee);
//邮件主题
message.setSubject("注册验证码二");
//邮件正文
message.setText("我是普通文本邮件内容");
javaMailSender.send(message);
}
}
}
测试结果一:发送HTML邮件
测试结果二:发送普通文本邮件
3. 发送HTML模板邮件
补充:如果想要发送自定义的HTML模板邮件的话,可以使用 template
。
在 pom.xml
中添加依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
修改发送邮件的代码,我把发送邮件的代码放在serviceImpl层
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private TemplateEngine templateEngine;
//这一步是获取application.properties中设置的发件人邮箱地址
@Value("${spring.mail.username}")
private String username;
@Override
public boolean sendEmail(String email, Integer code) throws MessagingException {
try {
//发邮件
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
// 第二个参数true表示使用HTML语言来编写邮件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//发件人邮件地址(上面获取到的,也可以直接填写,string类型)
helper.setFrom(username);
//收件人邮件地址
helper.setTo(email);
//邮件主题
helper.setSubject("注册验证码");
//使用模板thymeleaf
//Context是导这个包import org.thymeleaf.context.Context;
Context context = new Context();
//设置传入模板的页面的参数 参数名为:code 参数随便写就行
context.setVariable("code", code);
//emailTemplate是你要发送的模板我这里用的是Thymeleaf
String emailContent = templateEngine.process("emailTemplate", context);
//邮件正文
helper.setText(emailContent, true);
javaMailSender.send(mimeMessage);
return true;
} catch (Exception e) {
return false;
}
}
html文件放在 template
文件下
emailTemplate.html
文件的内容
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
<style type="text/css">
.....
css代码自己写
</style>
</head>
<body>
<div class="content">
<div class="content-box">
<div class="content-header">邮箱验证</div>
<div class="content-text">您好!您正在获取邮箱验证码信息,请注意邮箱验证码5分钟内有效,验证码提供给他人可能导致账号被盗,请勿泄露,谨防被骗。您的验证码是:</div>
<div class="content-code" th:text="${code}"></div>
</div>
</div>
</body>
</html>
效果演示