1. 准备QQ邮箱的授权码
2. 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3. 添加yml配置
spring:
mail:
host: smtp.qq.com
username: 邮件的发送方邮箱
password: 授权码
default-encoding: UTF-8
protocol: smtp
port: 465
properties:
mail:
smtp:
auth: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
port: 465
ssl:
enable: true
starttls:
enable: true
required: true
4. 发送邮箱需要用到的实体类
@Data
public class Mail implements Serializable {
private static final long serialVersionUID = 4359709211352400087L;
private String recipient;//邮件接收人
private String subject; //邮件主题
private String content; //邮件内容
}
5. 工具类
@Component
@Slf4j
public class MailUtil {
private static String sender; //邮件发送者
private static JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
public void setSender(String sender) {
MailUtil.sender = sender;
}
@Resource
public void setJavaMailSender(JavaMailSender javaMailSender) {
MailUtil.javaMailSender = javaMailSender;
}
/**
* 发送文本邮件
*
* @param mail
*/
public static void sendSimpleMail(Mail mail) {
try {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(sender); //邮件发送者
mailMessage.setTo(mail.getRecipient()); // 邮件发给的人
mailMessage.setSubject(mail.getSubject()); // 邮件主题
mailMessage.setText(mail.getContent()); // 邮件内容
javaMailSender.send(mailMessage);
log.info("邮件发送成功 收件人:{}", mail.getRecipient());
} catch (Exception e) {
log.error("邮件发送失败 {}", e.getMessage());
throw new BusinessException(ResultCodeEnum.EMAIL_FORMAT_ERROR); //这是我自定义的一个异常码
}
}
}
6. 测试
@Test
public void testSendMail(){
Mail mail = new Mail();
String code = "1234";
// 接受人
mail.setRecipient("205564122@qq.com");
mail.setSubject("找回密码");
mail.setContent(String.format("""
你的邮箱验证码为%s,不要把验证码告诉别人哟~
""",code));
MailUtil.sendSimpleMail(mail);
}