springboot實現郵箱驗證碼功能
阿新 • • 發佈:2020-02-13
本文例項為大家分享了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 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禁止重發
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。