javaweb邮箱验证码发送验证与点击倒计时实现
要求
实现邮件注册必须要引用mail.jar可以去网上下载
体验网址
欢迎大家注册使用以及通过留言访问
网址链接
效果图
前台h5注册部分代码
<div class="card border-0 shadow card--register" id="register">
<div class="card-body">
<h2 class="card-title">会员注册</h2>
<form action="AddUserServlet" method="post" onsubmit="return CheckForm2(this)">
<div class="form-group">
<input class="form-control" type="text" name="userName" placeholder="用户名" onfocus="FocusItemRegister(this)" onblur="CheckItemRegister(this)"/>
<span class="has-error"></span>
</div>
<div class="form-group" >
<input type="email" style="float:left;display:flex;width:100%" name = "userMail" class="form-control col-md-8" placeholder="邮箱" οnfοcus="FocusItemRegister(this)" οnblur="CheckItemRegister(this)"/>
<input type="button" class="form-control col-md-4" name = "text" value="获取验证码" οnclick="SendMail(this)" />
<span class="has-error"></span>
</div>
<div class="form-group" >
<input type="text" class="form-control" name="code" placeholder="验证码" onfocus="FocusItemRegister(this)" onblur="CheckItemRegister(this)"/>
<span class="has-error"></span>
</div>
<div class="form-group">
<input type="password" class="form-control " name = "userPassword" id = "userPassword" placeholder="密码" οnfοcus="FocusItemRegister(this)" οnblur="CheckItemRegister(this)"/>
<span class="has-error"></span>
</div>
<div class="form-group">
<input type="password" name = "EnteruserPassword" class="form-control " placeholder="确认密码" οnfοcus="FocusItemRegister(this)" οnblur="CheckItemRegister(this)"/>
<span class="has-error"></span>
</div>
<button class="btn btn-lg">注册</button>
</form>
</div>
<button class="btn btn-back js-btn" data-target="welcome"><i class="fas fa-angle-left"></i></button>
</div>
js部分(实现点击以后等待一分钟)
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
function FocusItemRegister(obj) {
if ($(obj).attr('name') == 'userMail') {// 如果为验证码
$(obj).next().next().html('');
} else {
$(obj).next('span').html('');
}
}
var mails = "";
var flag2 = false;
var flag3 = false;
var flag4 = false;
var flag5 = false;
var flag6 = false;
function CheckItemRegister(obj) {
var msgBox = $(obj).next('span');
switch ($(obj).attr('name')) {
case "userName":
if (obj.value == "") {
msgBox.html("用户名不能为空");
flag2 = false;
} else {
msgBox.html();
flag2 = true;
}
break;
case "userMail":
var mailBox = $(obj).next().next();
var mail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
var mails = $.trim($(obj).val());
if (obj.value == "") {
mailBox.html("邮箱不能为空");
flag3 = false;
} else {
var url = "usernamecheck?name=" + encodeURI($(obj).val()) + "&"
+ new Date().getTime();
// "true" 用户已存在 用户名异步刷新
$.get(url, function(data) {
if (!mail.exec(mails)) {
mailBox.html("邮箱输入格式不正确");
flag3 = false;
} else {
if(data == 'true'){
mailBox.html("邮箱账号已存在");
flag1 = false;
flag3 = false;
}else{
msgBox.html();
flag1 = true;
flag3 = true;
}
}
});
}
break;
case "EnteruserPassword":
if (obj.value == "") {
msgBox.html("确认密码不能为空");
flag4 = false;
} else if ($(obj).val() != $('input[name="userPassword"]').val()) {
msgBox.html("两次密码不一致");
flag4 = false;
}else {
msgBox.html();
flag4 = true;
}
break;
case "userPassword":
if (obj.value == "") {
msgBox.html("密码不能为空");
flag5 = false;
} else {
if ($(obj).val().length < 6) {
msgBox.html("长度不能小于六位");
flag5 = false;
} else {
msgBox.html();
flag5 = true;
}
}
break;
case "code":
if (obj.value == "") {
msgBox.html("验证码不能为空");
flag6 = false;
} else {
var url = "checkmailCode?code=" + encodeURI($(obj).val()) + "&"
+ new Date().getTime();
$.get(url, function(data) {
if (data == 'false') {
msgBox.html("验证码有误");
flag6 = false;
} else {
msgBox.html();
flag6 = true;
}
})
}
break;
}
}
/**
* 发送邮件
*
* @param obj
* @returns
*/
var InterValObj; // timer变量,控制时间
var count = 60; // 间隔函数,1秒执行
var curCount;// 当前剩余秒数
var mailBox;
function SendMail(obj) {
var mail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
var mails = $.trim($(obj).prev().val());
mailBox = $(obj);
if (mailBox.prev().val() == "") {
} else {
if (!mail.exec(mails)) {
} else {
if (flag1) {
getcheckCodeTime();
var url = "SendQMailServlet?userMail="
+ encodeURI($(obj).prev().val()) + "&"
+ new Date().getTime();
$.get(url, function(data) {
if (data == 'false') {
mailBox.val("发送失败");
}
});
}
};
}
}
function getcheckCodeTime() {
curCount = count;
mailBox.attr("disabled", "true");
InterValObj = window.setInterval(SetRemainTime, 1000); // 启动计时器,1秒执行一次
}
function SetRemainTime() {
if (curCount == 0) {
window.clearInterval(InterValObj);// 停止计时器
mailBox.removeAttr("disabled");// 启用按钮
mailBox.val("重新发送");
} else {
curCount--;
mailBox.val(curCount + "秒后重发");
}
}
usernamecheck Servlet
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
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 dao.UserDao;
import entity.User;
/**
* Servlet implementation class usernamecheck
*/
@WebServlet("/usernamecheck")
public class usernamecheck extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public usernamecheck() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
UserDao userdao = new UserDao();
PrintWriter out = response.getWriter();
if(userdao.isExist(name)) {
out.print("true");
}else {
out.print("false");
}
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
邮件发送servlet
package mailServlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
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 javax.servlet.http.HttpSession;
import DBUtil.SendQMail;
/**
* Servlet implementation class SendQMailServlet
*/
@WebServlet("/SendQMailServlet")
public class SendQMailServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SendQMailServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("utf-8");
String mail = request.getParameter("userMail");
SendQMail sendQMail = new SendQMail();
HttpSession session = request.getSession();
String mailCode = sendQMail.getcode();
PrintWriter out = response.getWriter();
boolean result;
try {
result = sendQMail.sendMail(mail, mailCode);
if(result) {
//邮件发送成功,向session域中发送mailCode
session.setAttribute("mailCode", mailCode);
}
out.print("true");
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.print("false");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
out.print("false");
} finally {
out.close();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
sendQMail类
package DBUtil;
import java.util.Date;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendQMail {
//私聊 qq 给 其他邮箱发
public static boolean sendMail(String Mail,String emailMsg) throws AddressException, MessagingException {
final String serverHost = "smtp.qq.com"; //发送方邮件服务器
final String from = "你的邮箱发送地址"; //发件人地址
final String shouqunma = "你的邮箱许可";
Properties properties = new Properties();
properties.put("mail.smtp.host", serverHost);
properties.put("mail.smtp.auth", "true");//true 一定要用引号引起来
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.port", "465"); //因为QQ邮箱的端口和人家的不一样,所以要指定
//设置安全提供者
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.socketFactory.fallback", "false");
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.starttls.enable", "true");
Session session = Session.getDefaultInstance(properties); //不使用Auth命令认证
session.setDebug(true);
//创建并设置消息内容
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(Mail));
Transport transport = session.getTransport("smtp");
msg.setSubject("XXX文库"); // 设置邮件主题
msg.setText("您正在进行XXX文库注册,您的6位激活码为"+emailMsg+"发送时间: "+new Date().toString());
transport.connect(serverHost,from, shouqunma ); //发送主机服务器,账号,授权码,例如:(QQ:qwuhxadj,163:自己设置)
transport.sendMessage(msg,msg.getAllRecipients());
transport.close();
return true;
}
//随机验证码
public static String getcode(){
String vcode = "";
for (int i = 0; i < 6; i++) {
vcode = vcode + (int)(Math.random() * 9);
}
return vcode;
}
}