首页 > 其他分享 >SpringBoot集成邮件服务进行校验

SpringBoot集成邮件服务进行校验

时间:2024-01-19 15:33:07浏览次数:30  
标签:SpringBoot 验证码 邮箱 校验 org import email 邮件 String

一、前言

在我们进行注册、登录等操作的时候,为了保证用户信息的安全性,我们经常会需要接收短信验证码等场景,虽然它的安全系数较高,但是由于需要付费使用,所以我们也可以使用邮箱服务接收验证码来实现安全校验,提升系统安全系数。

二、环境准备

以QQ邮箱为例,我们需要在邮箱中开启SMTP服务获取授权码。

SpringBoot集成邮件服务进行校验_邮件

SpringBoot集成邮件服务进行校验_SpringBoot_02

点击生成授权码。

SpringBoot集成邮件服务进行校验_邮件_03

SpringBoot集成邮件服务进行校验_邮件_04

三、SpringBoot集成

1.引入依赖

<!--QQ邮箱验证码所需jar包-->
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.创建邮件发送的控制层

package com.example.nettyserverdemo.controller;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Random;

/**
 * @author qx
 * @date 2023/12/29
 * @des 邮件发送控制层
 */
@RestController
public class EmailController {

    @GetMapping("/getCode")
    public void sendMail(@RequestParam("targetEmail") String targetEmail) throws EmailException {
        // 生成6位随机验证码
        String code = String.valueOf(new Random().nextInt(899999) + 100000);
        SimpleEmail email = new SimpleEmail();
        // 设置发送邮件的服务器
        email.setHostName("smtp.qq.com");
        String myEmail = "[email protected]";
        email.setAuthentication(myEmail, "xxxxxxxxx");
        // 发送者邮箱
        email.setFrom(myEmail);
        // 用于接收验证码的邮箱
        email.addTo(targetEmail);
        // 邮件的主题
        email.setSubject("注册验证码");
        // 邮件的内容
        email.setMsg("您的验证码为:" + code + "(一分钟有效)");
        // 发送邮件
        email.send();
    }
}

启动程序,我们先简单测试一下看看邮箱是否接收到验证码。

SpringBoot集成邮件服务进行校验_验证码_05

我们在接收的邮箱中发现确实收到了验证码的邮件。

SpringBoot集成邮件服务进行校验_邮件_06

3.优化

上面我们提到了验证码在一分钟内有效,那么我们就需要设置在这个时间内,我们不能频繁去请求邮箱获取验证码。我们就需要使用Redis来优化我们的代码。

package com.example.nettyserverdemo.controller;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Random;
import java.util.concurrent.TimeUnit;

/**
 * @author qx
 * @date 2023/12/29
 * @des 邮件发送控制层
 */
@RestController
public class EmailController {

    @Autowired
    private StringRedisTemplate redisTemplate;


    @GetMapping("/getCode")
    public String sendMail(@RequestParam("targetEmail") String targetEmail) throws EmailException {
        // 获取redis中指定邮箱为key的数据
        String redisCode = redisTemplate.opsForValue().get(targetEmail);
        if (redisCode == null) {
            // 生成6位随机验证码
            String code = String.valueOf(new Random().nextInt(899999) + 100000);
            // 验证码保存到redis中 接收邮箱为key,验证码为值 有效期为1分钟
            redisTemplate.opsForValue().set(targetEmail, code, 1, TimeUnit.MINUTES);
            SimpleEmail email = new SimpleEmail();
            // 设置发送邮件的服务器
            email.setHostName("smtp.qq.com");
            String myEmail = "[email protected]";
            email.setAuthentication(myEmail, "xxxxxxx");
            // 发送者邮箱
            email.setFrom(myEmail);
            // 用于接收验证码的邮箱
            email.addTo(targetEmail);
            // 邮件的主题
            email.setSubject("注册验证码");
            // 邮件的内容
            email.setMsg("您的验证码为:" + code + "(一分钟有效)");
            // 发送邮件
            email.send();
            return "验证码发送成功";
        }
        return "请勿重复发送验证码";
    }
}

我们重新启动程序继续进行测试。我们短时间内频繁请求获取邮箱验证码会提示错误。

SpringBoot集成邮件服务进行校验_邮件_07

1分钟后我们继续测试,由于redis中的数据过期了,所以又重新获取到了验证码并发送到指定的邮箱。

SpringBoot集成邮件服务进行校验_邮件_08

SpringBoot集成邮件服务进行校验_邮件_09

标签:SpringBoot,验证码,邮箱,校验,org,import,email,邮件,String
From: https://blog.51cto.com/u_13312531/9330396

相关文章

  • C++ 邮件槽ShellCode跨进程传输
    在计算机安全领域,进程间通信(IPC)一直是一个备受关注的话题。在本文中,我们将探讨如何使用Windows邮件槽(Mailslot)实现ShellCode的跨进程传输。邮件槽提供了一种简单而有效的单向通信机制,使得任何进程都能够成为邮件槽服务器,并通过UDP通信向其他进程发送数据。邮件槽是Windows操作系统......
  • 微服务、springboot热部署
    添加热部署依赖,如果项目中已有就不用加了<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency......
  • 基于 SpringBoot + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统
    Tansci-Boot基于SpringBoot2+magic-api+Vue3+ElementPlus+amis3.0快速开发管理系统Tansci-Boot是一个前后端分离后台管理系统,前端集成amis低代码前端框架,后端集成magic-api的接口快速开发框架。包含基础权限、安全认证、以及常用的一些组件功能。项目......
  • 上传图片,必填增加校验
    <el-form-itemlabel="产品照片:"class="product-manual-box":prop="`infoTabs[${index}].productfmId`":rules="{required:true,message:'请上传产品照片',trigger:'change'}">......
  • springboot配置分页插件pageHelper和数据库方言的几种方式
    方式一:启动类配置分页插件(Application.java)1/**2*pageHelper分页插件3*/4@Bean5publicPageHelperByMyselfpageHelper(){6PageHelperByMyselfpageHelper=newPageHelperByMyself();7Propertiesproperties=newPr......
  • 登录功能-校验token实现
    登录功能-token校验用户是否为登录态1、Redis环境的准备:使用docker拉取Redis镜像·卸载掉已安装的docker,确保yum包更新到最新:[卸载旧版本(如果安装过旧版本的话)]sudoyumremovedockerdocker-commondocker-selinuxdockesr-engine·安装yuminstall-yyum-utilsdevi......
  • mail邮件的POP、IMAP和SMTP设置教程,简单好用
    在现代社会中,电子邮件已经成为人们日常沟通的重要方式之一。为了能够顺利收发邮件,正确设置邮件客户端的POP、IMAP和SMTP是至关重要的步骤。本文将为大家详细介绍如何进行这些设置,使邮件体验更为简单和便捷。1.POP、IMAP、SMTP是什么?在深入了解如何设置之前,我们先来了解一下这三个......
  • SpringBoot中操作Bean的生命周期的方法
    SpringBoot中操作Bean的生命周期的方法路人路人甲Java2024-01-1719:17发表于上海引言在SpringBoot应用中,管理和操作Bean的生命周期是一项关键的任务。这不仅涉及到如何创建和销毁Bean,还包括如何在应用的生命周期中对Bean进行精细控制。Spring框架提供了多种机制来......
  • Sa-Token介绍与SpringBoot环境下使用
    个人博客:无奈何杨(wnhyang)个人语雀:wnhyang共享语雀:在线知识共享Github:wnhyang-Overview官网:Sa-Token一个轻量级Java权限认证框架,让鉴权变得简单、优雅!介绍Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话......
  • 发送邮件
    importtimeimportrandom'''定义一个函数,展示菜单栏'''defrandom_code():number=random.randint(100000,999999)returnnumber定义一个函数发送邮箱defsend_email(receiver_email,info):#zyxkyiufoghagijeimportsmtplibfromemail.mime.texti......