SpringBoot整合Mail发送邮件功能

 更新时间:2021年11月12日 14:51:04   作者:花伤情犹在  
我们在网站上注册账号的时候一般需要获取验证码,而这个验证码一般发送在你的手机号上还有的是发送在你的邮箱中,注册,账号密码…都需要用到验证,今天就演示一下如何用SpringBoot整合Mail发送邮箱

前言

我们在网站上注册账号的时候一般需要获取验证码,而这个验证码一般发送在你的手机号上还有的是发送在你的邮箱中,注册,账号密码…都需要用到验证,今天就演示一下如何用SpringBoot整合Mail发送邮箱。

Maven依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

使用QQ邮箱演示

国内QQ邮箱的用户占多数,所以本文以QQ邮箱作为演示。

使用QQ邮箱需要开启SMTP服务

QQ邮箱默认关闭了SMTP服务,所以需要我们手动打开:

在这里插入图片描述

配置application.properties/yml

# 应用服务 WEB 访问端口
server.port=8080
# 邮箱用户名
spring.mail.username=your mail
# 授权码
spring.mail.password=授权码
# 邮箱主机
spring.mail.host=smtp.qq.com
# 开启SSL
spring.mail.properties.mail.smtp.ssl.enable=true
# 认证
spring.mail.properties.mail.smtp.auth=true
# 开启SSL安全模式
spring.mail.properties.mail.smtp.starttls.enable=true
# 必须启动SSL安全模式
spring.mail.properties.mail.smtp.starttls.required=true
# SSL Config
# 端口
spring.mail.port=465
# 协议
spring.mail.protocol=smtp
# 默认编码
spring.mail.default-encoding=UTF-8
# 套接字工厂端口
spring.mail.properties.mail.smtp.socketFactory.port=465
# 套接字工厂类
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

配置好这些后,springboot会自动帮我们配置好相关的邮件发送类。

发送普通邮件

@SpringBootTest
class Demo1ApplicationTests {

    @Autowired
    JavaMailSender javaMailSender;

    @Test
    public void sendSimpleMail() {
        // 构建一个邮件对象
        SimpleMailMessage message = new SimpleMailMessage();
        // 设置邮件主题
        message.setSubject("这是一封测试邮件");
        // 设置邮件发送者,这个跟application.yml中设置的要一致
        message.setFrom("1926585708@qq.com");
        // 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似
        // message.setTo("1*****@qq.com","2*****qq.com");
        message.setTo("1926585708@qq.com");
        // 设置邮件发送日期
        message.setSentDate(new Date());
        // 设置邮件的正文
        message.setText("这是测试邮件的正文");
        // 发送邮件
        javaMailSender.send(message);
    }
}

查看邮箱:

在这里插入图片描述

验证码案例

使用thymeleaf模板搭建HTML页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>验证码</title>
</head>
<body>

<div style="text-align: center">
    请输入您的邮箱:<input id="email" type="text"> <input id="getcode" type="button" value="获取验证码"><br>
    验证码:<input id="code" type="text"><br>
    <input id="check" type="button" value="验证"><br>
</div>

<script type="text/javascript" th:src="@{/js/jquery-3.6.0.js}"></script>
<script>
    //发送验证码
    $("#getcode").click(function () {
        var btn = $("#getcode");
        var time = 30;//定义时间变量。用于倒计时用
        var timer = null;//定义一个定时器;
        timer = setInterval(function(){///开启定时器。函数内执行
            btn.disabled = true;
            btn.val(time+"秒后重新获取");    //点击发生后,按钮的文本内容变成之前定义好的时间值。
            time--;//时间值自减
            if(time==0){     //判断,当时间值小于等于0的时候
                btn.val('重新获取验证码'); //其文本内容变成……点击重新发送……
                btn.disabled = false;
                clearInterval(timer); //清除定时器
            }
        },1000)
        $.post({
            url : "/getmailcode",
            data : {"mail":$("#email").val()},
            success : function (data) {
                alert("验证码已发送,请注意查收");
            }
        });
    })
    //检查验证码
    $("#check").click(function (){
        $.post({
            url: "/checkCode",
            data: {"code":$("#code").val()},
            success:function (data){
                if (data==0){
                    alert("验证码错误")
                }else {
                    alert("验证码正确")
                }
            }
        })
    })
</script>
</body>
</html>

效果:

在这里插入图片描述

定义Controller:

/**
 * 邮箱验证码
 */
@Controller
public class MailCodeController {

    @Autowired
    MailUtils mailUtils;

    /**
     * 验证页面
     *
     */
    @RequestMapping("/login")
    public String login(){
        return "login";
    }

    /**
     * 获取验证码
     * @param mail
     * @return
     */
    @PostMapping("/getmailcode")
    @ResponseBody
    public String getMailCode(String mail, HttpSession session){
        String mailCode = this.mailUtils.getMailCode(mail);
        System.out.println("获取到验证码:"+mailCode);
        session.setAttribute("code",mailCode);
        return "ok";
    }

    /**
     * 检查验证码
     * @param code
     * @return 1:正确 0:错误
     */
    @PostMapping("/checkCode")
    @ResponseBody
    public String checkCode(String code, HttpSession session){
        String checkCode = (String) session.getAttribute("code");
        if (checkCode!=null){
            if (code.equals(checkCode)){
                return "1";
            }else {
                return "0";
            }
        }
        return "0";
    }


}

MailUtils邮箱工具类:

@Component
public class MailUtils {

    @Autowired
    private JavaMailSender mailSender;

    public String getMailCode(String mail){
        Random random = new Random();
        String code="";
        for (int i=0;i<6;i++)
        {
            code+=random.nextInt(10);
        }
        //邮件设置1:一个简单的邮件
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject("验证码消息");
        message.setText("您的验证码为 : 【 "+code+" 】");

        message.setTo(mail);
        message.setFrom("1926585708@qq.com");
        mailSender.send(message);
        return code;
    }
}

验证效果:

在这里插入图片描述

到此这篇关于SpringBoot整合Mail发送邮件的文章就介绍到这了,更多相关SpringBoot发送邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中Class类的作用与深入理解

    Java中Class类的作用与深入理解

    这篇文章主要介绍了Java中Class类的作用与深入理解的相关资料,希望通过本文能帮助到大家让大家理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • Spring注解@Qualifier的使用&&与@Primary注解的不同

    Spring注解@Qualifier的使用&&与@Primary注解的不同

    今天带你了解一下Spring框架中的@Qualifier 注解,它解决了哪些问题,以及如何使用它,我们还将了解它与 @Primary 注解的不同之处,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • Spring Boot的filter(过滤器)简单使用实例详解

    Spring Boot的filter(过滤器)简单使用实例详解

    过滤器(Filter)的注册方法和 Servlet 一样,有两种方式:代码注册或者注解注册,下面通过实例给大家介绍Spring Boot的filter(过滤器)简单使用,一起看看吧
    2017-04-04
  • 解决mybatisPlus 中的field-strategy配置失效问题

    解决mybatisPlus 中的field-strategy配置失效问题

    这篇文章主要介绍了解决mybatisPlus 中的field-strategy配置失效问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot事件机制相关知识点汇总

    SpringBoot事件机制相关知识点汇总

    这篇文章主要介绍了SpringBoot事件机制相关知识点汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java实现文件及文件夹的删除

    Java实现文件及文件夹的删除

    这篇文章主要为大家详细介绍了Java实现文件及文件夹的删除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • spring hibernate实现动态替换表名(分表)的方法

    spring hibernate实现动态替换表名(分表)的方法

    下面小编就为大家带来一篇spring hibernate实现动态替换表名(分表)的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • mybatis-xml映射文件及mybatis动态sql详解

    mybatis-xml映射文件及mybatis动态sql详解

    XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名),这篇文章主要介绍了mybatis-xml映射文件及mybatis动态sql的相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • SpringBoot中配置log4j2日志详解

    SpringBoot中配置log4j2日志详解

    这篇文章主要介绍了SpringBoot中配置log4j2日志详解,Apache Log4j2 是对原先的 Log4j 项目的升级版本,参考了 logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,需要的朋友可以参考下
    2023-11-11
  • Java中字符串String的+和+=及循环操作String原理详解

    Java中字符串String的+和+=及循环操作String原理详解

    Java编译器在编译时对String的+和+=操作会创建StringBuilder对象来进行字符串的拼接,下面这篇文章主要给大家介绍了关于Java中字符串String的+和+=及循环操作String原理的相关资料,需要的朋友可以参考下
    2023-01-01

最新评论