springboot实现邮箱验证码功能

 更新时间:2020年02月12日 15:07:14   作者:梅比斯-维维亚米利欧  
这篇文章主要为大家详细介绍了springboot实现邮箱验证码功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了springboot实现邮箱验证码功能的具体代码,供大家参考,具体内容如下

我这边使用的QQ邮箱

1、首先创建maven项目,配置pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 
 <groupId>com.example</groupId>
 <artifactId>springbootdemo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>
 
 <name>springbootdemo</name>
 <description>Demo project for Spring Boot</description>
 
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.0.4.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
 </properties>
 
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>1.3.2</version>
 </dependency>
 <!--邮件发送核心包-->
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-mail</artifactId>
 </dependency>
 <dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>2.4</version>
 </dependency>
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <scope>runtime</scope>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-test</artifactId>
 <scope>test</scope>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>
 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
  </dependency>
 
 <!--mybatis分页插件-->
 <dependency>
 <groupId>com.github.pagehelper</groupId>
 <artifactId>pagehelper</artifactId>
 <version>4.1.6</version>
 </dependency>
 
 
 </dependencies>
 
 <build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 </plugins>
 <resources>
 <resource>
 <directory>src/main/java</directory>
  <includes>
  <include>**/*.xml</include>
  </includes>
 </resource>
 </resources>
 </build>
 
</project>

2、配置springboot,我这里使用的是properties方式

#配置Mybatis别名和扫描包
mybatis.type-aliases-package=com.demo.bean
mybatis.mapper-locations=classpath:mapper/*.xml
 
#数据库相关
spring.datasource.url=jdbc:mysql://localhost:3306/ssm?useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 
#配置日志
logging.level.root=info
logging.level.com.demo.mapper=debug
 
#配置视图前缀和后缀
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.html
 
#邮件发送配置
spring.mail.default-encoding=UTF-8
spring.mail.host=smtp.qq.com
spring.mail.username=你的邮箱
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
 
#thymeleaf配置
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.cache=false

邮箱授权码可以按以下方法获取
打开QQ邮箱网页→设置→账户→POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务→开启POP3/SMTP服务,然后就能看到授权码了

3、编写mailService

${spring.mail.username}是在properties中配置的属性,这里有一个方法,第一个是发送普通邮件,第二个是发送带有附件的邮件

@Service("mailService")
public class MailService {
 @Value("${spring.mail.username}")
 private String from;
 @Autowired
 private JavaMailSender mailSender;
 
 Logger logger = LoggerFactory.getLogger(this.getClass());
 
 public void sendSimpleMail(String to,String title,String content){
  SimpleMailMessage message = new SimpleMailMessage();
  message.setFrom(from);
  message.setTo(to);
  message.setSubject(title);
  message.setText(content);
  mailSender.send(message);
  logger.info("邮件发送成功");
 }
 
 public void sendAttachmentsMail(String to, String title, String cotent, List<File> fileList){
  MimeMessage message = mailSender.createMimeMessage();
  try {
   MimeMessageHelper helper = new MimeMessageHelper(message,true);
   helper.setFrom(from);
   helper.setTo(to);
   helper.setSubject(title);
   helper.setText(cotent);
   String fileName = null;
   for (File file:fileList) {
    fileName = MimeUtility.encodeText(file.getName(), "GB2312", "B");
    helper.addAttachment(fileName, file);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  mailSender.send(message);
  logger.info("邮件发送成功");
 }
}

4、编写controller

@Controller
public class MailController {
 @Autowired
 private MailService mailService;
 
 @RequestMapping("getCheckCode")
 @ResponseBody
 public String getCheckCode(String email){
  String checkCode = String.valueOf(new Random().nextInt(899999) + 100000);
  String message = "您的注册验证码为:"+checkCode;
  try {
   mailService.sendSimpleMail(email, "注册验证码", message);
  }catch (Exception e){
   return "";
  }
  return checkCode;
 }
}

5、编写页面

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>注册</title>
 <link rel="stylesheet" href="layui/css/layui.css" rel="external nofollow" >
 <script src="layui/layui.js"></script>
</head>
<body style="width: 100%;height: 100%;">
 <div style="margin-top: 15%;">
  <div class="layui-main" style="width: 700px;">
   <h1 style="text-align: center">请输入注册信息</h1>
   <form class="layui-form layui-form-pane">
    <div class="layui-form-item">
     <label class="layui-form-label">邮箱:</label>
     <div class="layui-input-block">
      <input id="email" type="email" name="username" class="layui-input" lay-verify="required"/>
     </div>
    </div>
    <div class="layui-form-item">
     <label class="layui-form-label">密码:</label>
     <div class="layui-input-block">
      <input id="password" type="password" name="password" class="layui-input" lay-verify="required"/>
     </div>
    </div>
    <div class="layui-form-item">
     <label class="layui-form-label">邮箱验证码:</label>
     <div class="layui-input-block">
      <input id="checkCode" type="text" name="checkCode" class="layui-input" lay-verify="required"/>
      <button id="sendCheckCode" type="button" class="layui-btn layui-btn-normal">获取验证码</button>
     </div>
    </div>
    <div class="layui-form-item">
     <div class="layui-input-block">
      <button class="layui-btn" lay-submit lay-filter="register">确认</button>
     </div>
    </div>
   </form>
  </div>
 </div>
 <script>
  layui.use("form",function () {
   var form = layui.form;
   var $ = layui.$;
   
   form.on("submit(register)",function (data) {
    var inputCheckCode = $("#checkCode").val();
    if (inputCheckCode == checkCode){
     $.ajax({
      url:"/register",
      type:"POST",
      data:data.field,
      async:false,
      success:function (text) {
       if ("ok" == text){
        layer.alert("注册成功",function () {
         window.location.href = "index.html";
        });
       }else{
        layer.alert("注册失败");
       }
      }
     });
    } else{
     layer.msg("验证码输入错误");
    }
    return false;
   });
 
   //验证码
   var checkCode = "";
 
   $("#sendCheckCode").click(function () {
    var email = $("#email").val();
    if (email == null || email == ""){
     layer.msg("请输入邮箱!!!");
     return;
    }
    var index = layer.open({
     type:3,
     content:"邮件发送中..."
    });
 
    $.ajax({
     url:"/getCheckCode?email="+email,
     type:"get",
     success:function (text) {
      if (text != null && text != ""){
       layer.close(index);
       layer.msg("已发送");
       checkCode = text;
       countDown();
      } else{
       layer.alert("获取失败,请重新获取")
      }
     }
    });
   });
 
   var maxTime = 60;
   function countDown(){
    if (maxTime == 0){
     checkCode = "";
     $("#sendCheckCode").removeClass("layui-btn-disabled");
     $("#sendCheckCode").removeAttr("disabled")
     $("#sendCheckCode").html("获取验证码");
     maxTime = 60;
    }else{
     $("#sendCheckCode").attr("disabled","disabled");
     $("#sendCheckCode").addClass("layui-btn-disabled");
     form.render();
     $("#sendCheckCode").html(maxTime+"秒后重新获取");
     maxTime--;
     setTimeout(countDown,1000);
    }
   }
 
  });
 </script>
</body>
</html>

6、测试

邮件发送

发送成功

收到邮件

60s禁止重发

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 时间处理函数工具分享(时间戳计算)

    时间处理函数工具分享(时间戳计算)

    这篇文章主要介绍了时间处理函数工具,包括得到时间戳、周一、周末、时间更改、时间精确计算等功能
    2014-01-01
  • Java多线程ThreadAPI详细介绍

    Java多线程ThreadAPI详细介绍

    这篇文章主要介绍了Java多线程ThreadAPI详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • ClassLoader双亲委派模式作用详解

    ClassLoader双亲委派模式作用详解

    这篇文章主要为大家介绍了ClassLoader双亲委派模式作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 浅谈maven的jar包和war包区别 以及打包方法

    浅谈maven的jar包和war包区别 以及打包方法

    下面小编就为大家分享一篇浅谈maven的jar包和war包区别 以及打包方法,具有很好的参考价值,希望对大家有所帮助
    2017-11-11
  • Java Excel数据导入数据库的方法

    Java Excel数据导入数据库的方法

    这篇文章主要为大家详细介绍了Java Excel数据导入数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 简单了解Java位域的一些知识

    简单了解Java位域的一些知识

    这篇文章主要介绍了简单了解Java位域的一些知识,这个概念是在 Effective Java中了解到的, 可以通过EnumSet来代替位域这种方式表达,需要的朋友可以参考下
    2019-07-07
  • Java通俗易懂系列设计模式之适配器模式

    Java通俗易懂系列设计模式之适配器模式

    这篇文章主要介绍了Java通俗易懂系列设计模式之适配器模式,对设计模式感兴趣的同学,一定要看一下
    2021-04-04
  • SpringBoot解决跨域的超实用方案分享

    SpringBoot解决跨域的超实用方案分享

    这篇文章介绍了使用SpringBoot解决跨域问题的方法,并提供了详细的代码示例和解释,适合对跨域问题不太熟悉的读者,感兴趣的小伙伴跟着小编一起来学习吧
    2023-05-05
  • Spring Security实现动态路由权限控制方式

    Spring Security实现动态路由权限控制方式

    这篇文章主要介绍了Spring Security实现动态路由权限控制方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 使用Java实现一个不同难度(高、中、低)的猜数字游戏

    使用Java实现一个不同难度(高、中、低)的猜数字游戏

    本文介绍了一个增强版的猜数字游戏,包括菜单打印、游戏维持、逻辑功能选择和源代码展示,游戏通过随机数生成和逻辑判断来维持游戏进程,用户可以选择不同的难度,源代码展示了如何实现这三种不同难度的猜数字游戏,为玩家带来更多挑战和乐趣,需要的朋友可以参考下
    2024-09-09

最新评论