Java web实现邮箱验证码功能

  • 第一步、开启发件邮箱权限(以QQ邮箱为例)
  • 第二步、生成验证码
  • 第三步、发送邮件
  • 第四步、web前端
  • 第五步、servlet程序

先放一张程序的预览图

工程下载链接
链接:https://pan.baidu.com/s/1Lrm8d6mBemKIWKd0ll0E9g
提取码:vrwh

第一步、开启发件邮箱权限(以QQ邮箱为例)

设置->账户->开启POP3/SMTP服务

开启后会获取一个授权码,记住这个授权码,这个相当于是一个密码。

第二步、生成验证码

import java.util.Random;public class VCodeUtill {/** 生成n位随机验证码,包括数字和大小写字母* @param 验证码长度* @return n位验证码*/public static String verifyCode(int n) {StringBuilder strB = new StringBuilder();Random rand = new Random();for(int i = 0; i < n; i++) {int r1 = rand.nextInt(3);int r2 = 0;switch (r1) {  // r2为ascii码值case 0: // 数字r2 = rand.nextInt(10) + 48;  // 数字:48-57的随机数break;case 1:r2 = rand.nextInt(26) + 65;  // 大写字母 break;case 2:r2 = rand.nextInt(26) + 97;  // 小写字母 break;default:break;}strB.append((char)r2);}return strB.toString();}
}

第三步、发送邮件

这一步需要java.mail.jar下载链接

import java.util.Date;
import java.util.Properties;import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;public class EmailUtil {private static String fromEmail = "937492171@qq.com";  // 发件人账号private static String fromEmailPw = "bgyqinrqpbdebdif";  // 发件人密码private static String myEmailSMTPHost = "smtp.qq.com";  // 发件邮箱服务器private static Properties props;  // 用于参数配置private static Session session;  // 用于创建会话对象private String vCode;public static EmailUtil instance = new EmailUtil();/** 获取验证码* @return 验证码字符串*/public String getVCode() {return vCode;}/** 构造函数,配置属性*/private EmailUtil() {props = new Properties();props.setProperty("mail.transport.protocol", "smtp");  // 使用的协议(JavaMail规范要求)props.setProperty("mail.smtp.host", myEmailSMTPHost);  // 发件人的邮箱的 SMTP 服务器地址props.setProperty("mail.smtp.auth", "true");  // 需要请求认证session = Session.getInstance(props);// session.setDebug(true);  // 设置为debug模式, 可以查看详细的发送 log }/** 构建邮件内容* @param 收件人* @return 发送邮件内容*/public MimeMessage createMailContent(String toEmail) throws Exception, MessagingException {MimeMessage message = new MimeMessage(session);// 发件人message.setFrom(new InternetAddress(fromEmail, "验证码发送系统", "UTF-8"));// 收件人message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(toEmail));// 邮件主题message.setSubject("验证码", "UTF-8");// 邮件正文 vCode = VCodeUtill.verifyCode(6);message.setContent("您好,您的验证码是:"+vCode+"。", "text/html;charset=UTF-8");// 设置发件时间message.setSentDate(new Date());// 保存设置message.saveChanges();return message;}/** 发送邮件* @param 收件人*/public void sendEmail(String toEmail) throws Exception {Transport transport = session.getTransport();transport.connect(fromEmail, fromEmailPw);MimeMessage message = createMailContent(toEmail);  // 邮件内容transport.sendMessage(message, message.getAllRecipients());System.out.println("验证码发送成功!");// 关闭连接transport.close();}
}

第四步、web前端

准备:jquery-1.11.3.js下载链接
简单的前端界面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML>
<html><head><base href="<%=basePath%>"><title>Java web邮箱验证码</title></head><body><form id="form0" name="form0" AUTOCOMPLETE="OFF"><table>              <tr height="35px"><td >收件邮箱:</td><td><input type="text" name="email" id="email" placeholder="输入邮箱" /></td><td><button id="btnGetVcode" style="cursor:pointer">获取验证码</button></td></tr><tr height="35px"><td >验证码:</td><td><input type="text" name="vcode" id="vcode" placeholder="输入验证码"/></td><td id="message"></td></tr></table><a target="_self"><button type="button" id="btnVerify" style="cursor:pointer">验证</button></a></form><!-- 引入jQuery --><script type="text/javascript" src="js/jquery-1.11.3.js"></script><script type="text/javascript" src="js/jsEmail.js"></script></body>
</html>

对应的javascript程序:

var time0 = 60;
var time = time0;
var t;  // 用于验证按钮的60s计时$(document).ready(function() {// 获取验证码按钮$("#btnGetVcode").click(function() {var btnGet = document.getElementById("btnGetVcode");btnGet.disabled = true;  // 为了防止多次点击$.ajax({url: 'EmailServlet?method=getVCode',type: 'post',data: {email: $("input[name='email']").val()},dataType: 'text',success: function(msg) {if(msg == -1){window.alert("请输入正确的邮箱!");btnGet.disabled = false;}else{useChangeBTN();  // 控制下一次重新获取验证码}},error:function(msg){}});});// 验证按钮$("#btnVerify").click(function() {var message = document.getElementById("message");  // 显示提示信息$.ajax({url: 'EmailServlet?method=verify',type: 'post',data: {vcode: $("input[name='vcode']").val()},dataType: 'text',success: function(msg) {if(msg == 1){message.innerHTML = "验证码正确!";$("#message").css("color","green");}else{message.innerHTML = "验证码错误!";$("#message").css("color","red");}},error:function(msg){}});});
});//修改按钮,控制验证码重新获取
function changeBTN(){if(time > 0){$("#btnGetVcode").text("("+time+"s)"+"重新获取");time = time - 1;}else{var btnGet = document.getElementById("btnGetVcode");btnGet.disabled = false;$("#btnGetVcode").text("获取验证码");clearInterval(t);time = time0;}
}
function useChangeBTN(){$("#btnGetVcode").text("("+time+"s)"+"重新获取");time = time - 1;t = setInterval("changeBTN()", 1000);  // 1s调用一次
}

第五步、servlet程序

import java.io.IOException;
import java.io.PrintWriter;
import java.util.regex.Pattern;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import util.EmailUtil;@SuppressWarnings("serial")
@WebServlet(urlPatterns={"/EmailServlet"})
public class EmailServlet extends HttpServlet {private String email;  // 获取的收件人邮箱private String vCode;  // 后台产生的验证码private String vCodeReceive;  // 接收到前端输入的验证码private String method;  // 要接收的方法private PrintWriter out;  // 输出流private EmailUtil emailUtil = EmailUtil.instance;public EmailServlet() {// TODO Auto-generated constructor stubSystem.out.println("初始化");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubdoPost(req, resp);}/** 在此实现servlet*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO Auto-generated method stubresp.setContentType("text/html");//语言编码req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");out = resp.getWriter();// 获取来自前端的参数email = req.getParameter("email");vCodeReceive = req.getParameter("vcode");method = req.getParameter("method");switch (method) {case "getVCode":mGetVCode();break;case "verify":mVerify();break;default:break;}out.flush();out.close();}/** 产生验证码,并发送邮件*/private void mGetVCode() {// TODO Auto-generated method stubif(!isEmail(email)) {  // 邮箱不正确out.print(-1);return;}try {emailUtil.sendEmail(email);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}vCode = emailUtil.getVCode();System.out.println("验证码为:" + vCode);out.print(1);}/** 邮箱正确性检测* @param 邮箱字符串* @return true/false*/private boolean isEmail(String email) {if(email.length() == 0 || email == null) {return false;}// 正则表达式验证邮箱Pattern pattern = Pattern.compile("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$");return pattern.matcher(email).matches();}/** 验证码验证*/private void mVerify() {// TODO Auto-generated method stubif(vCode.equals(vCodeReceive)) {out.print(1);}else {out.print(-1);}}@Overridepublic void destroy() {// TODO Auto-generated method stubsuper.destroy();}@Overridepublic void init() throws ServletException {// TODO Auto-generated method stubsuper.init();}
}

看一波效果

Java web发送邮箱验证码,并验证正确性相关推荐

  1. java实现发送邮箱验证码——三步搞定java邮箱发送验证码

    大家好,我是你们不熟悉的超厂长,每天2--3更,发布java小白教程 微信公众号:程序员PG 今天早上一直在考虑网上的邮箱注册是怎么注册的 一般流程就是你输入你的邮箱和设置你的密码,点击发送后,就会发 ...

  2. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片...

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  3. Java发送邮箱验证码、session校验功能

    本篇主要描述"发送邮箱验证码.session校验"相关前(htmljs)后(java)台代码,业务逻辑示例,闲话少诉,直接上代码. 1.引入的jar包是mail-1.4.jar 2 ...

  4. Java实现QQ邮箱验证激活 Java简单发送邮箱

    Java简单发送邮箱 1.首先要去qq邮箱 设置–账户–把所有服务都开启 (记住其中任意一个授权码就OK了) 如下图: 2. 导入jar包 创建测试类 (复制即可) 如下: package testE ...

  5. 发送邮箱验证码进行注册验证

    一.流程图 操作思路 进行邮箱验证码验证 比较与输入的验证码 是否一致 一致的话则可以注册 ** 打开邮箱IMAP/SMTP服务 ** 二.代码示例 (1)生成随机验证码 def get_random ...

  6. spring boot 实现发送邮箱验证码

    首先设置一下发件人邮箱,以QQ邮箱为例: 找到帐户,开启POP3/SMTP服务 然后会提醒你怎么去实现,验证完后,会给你一个授权码,记住这个授权码,后端spring boot 会用到 下面回到IDEA ...

  7. 【java图片验证码】Java 服务端生成图片验证码及验证

    Java 服务端生成图片验证码及验证 简介 验证码是防止有人利用机器人自动批量注册.对特定的注册用户用特定程序暴力破解方 式进行不断的登录.灌水.因为验证码是一个混合了数字或符号的图片,人眼看起来都费 ...

  8. Thinkphp5.1实现发送邮箱验证码

    这里使用的是 phpmailer/phpmailer 这个类 第一步加载类 composer require phpmailer/phpmailer 第二步编写公共方法 /*** 邮箱验证码* @pa ...

  9. 使用SpringBoot发送邮箱验证码

    使用SpringBoot发送邮箱验证码 一.开启发送验证码邮箱的POP3/SMTP服务 1. 登录发送验证码邮箱 2. 找到设置,开启POP3/SMTP服务 二.导入依赖 三.增加配置 四.编写代码 ...

最新文章

  1. Linux修改/etc/profile配置错误command is not found自救方法
  2. python进程监控并重启
  3. zabbix如何监控linux磁盘性能IO
  4. 经典排序 —— 选择排序
  5. discuz mysql配置文件_MySQL优化配置文件my.ini(discuz论坛)
  6. angularjs通信以及postmessage与iframe通信
  7. CSS3 圆形时钟式网页进度条
  8. 第三方验收测试-功能测试方案
  9. 虚拟机共享文件夹制作|Ubuntu与本机文件共享
  10. WPS 调整多级编号
  11. 推荐10篇2021年服装设计相关毕业论文文献
  12. 计算机课听课评语和建议,听课记录的评语及建议
  13. PCB设计中如何进行统一批量检测并生成错误报告
  14. linux perl 升级,科学网—一次Perl版本升级引发的吐槽大会 - 黄健的博文
  15. Placeholder_2:0 is both fed and fetched
  16. 我的世界java版刷雪球机,我的世界手机版怎么刷雪球 无限刷雪球机
  17. Apche Kylin启动报错:UnknownHostException: node1:2181: invalid IPv6 address
  18. 学习HTML5开发RPG游戏第五步游戏界面设计一
  19. 潘多拉游戏机用linux,linux中的潘多拉! Busybox!
  20. leetcode【537】Complex Number Multiplication(复数相乘)

热门文章

  1. [树梅派专题笔记]树莓派忘记密码怎么办?
  2. 大数据测评/大数据技术与应用 - 电子书下载(高清版PDF格式+EPUB格式)
  3. 五万块钱买什么车好_5万左右买什么车好,5万元左右口碑最好车
  4. 强大 程序员教你如何快速在线订火车票 永不超时
  5. 首尔市政府任命区块链治理小组成员
  6. 功能核磁共振成像资料分享汇总
  7. Java判断mp3文件是否有声音
  8. 火狐配置文件linux,驯服火狐:Linux下Firefox文件配置技巧
  9. 荧光素FITC标记多糖,FITC-polysaccharide
  10. java二进制转化为十进制_用Java将二进制转换为十进制的程序