springboot发送QQ邮件(最简单方式)

前言:使用邮箱注册时发送邮件获取验证码;找回密码时通过邮箱进行验证;或者其他需要发送邮件的场景。
主要针对在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>

效果演示
在这里插入图片描述

发布了15 篇原创文章 · 获赞 10 · 访问量 2703

猜你喜欢

转载自blog.csdn.net/qq_38157825/article/details/104792574