Java 郵箱傳送驗證碼且60秒內登入
阿新 • • 發佈:2018-12-12
在我們平時上網時,經常會使用郵箱傳送驗證碼,去登入或者註冊。我使用了jar包和陣列,集合,session完成了驗證碼的傳送,在前端,使用ajax傳送驗證碼,然後使用Jquery讓使用者在60秒以內不能重新獲取驗證碼。
首先,我們需要下載這三個包。點次連結下載
介面大家可以自由設計,我設計的比較簡單。
接下來是驗證碼的生成,和傳送。
import java.util.Arrays; import java.util.Collections; import java.util.List; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.SimpleEmail; public class EmailUtil { // 隨機驗證碼 public String achieveCode() { //由於數字1 和0 和字母 O,l 有時分不清,所有,沒有字母1 、0 String[] beforeShuffle= new String[] { "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; List list = Arrays.asList(beforeShuffle);//將陣列轉換為集合 Collections.shuffle(list); //打亂集合順序 StringBuilder sb = new StringBuilder(); for (int i = 0; i < list.size(); i++) { sb.append(list.get(i)); //將集合轉化為字串 } return sb.toString().substring(3, 8); //擷取字串第4到8 } public static void sendAuthCodeEmail(String email, String authCode) { try { SimpleEmail mail = new SimpleEmail(); mail.setHostName("smtp.163.com");//傳送郵件的伺服器 mail.setAuthentication("15182060324", "X123456");//登入郵箱的密碼,是開啟SMTP的密碼 mail.setFrom("
[email protected]","阿薩斯"); //傳送郵件的郵箱和發件人 mail.setSSLOnConnect(true); //使用安全連結 mail.addTo(email);//接收的郵箱 mail.setSubject("藍橋酒店驗證碼");//設定郵件的主題 mail.setMsg("尊敬的使用者:你好!\n 藍橋酒店登陸驗證碼為:" + authCode+"\n"+" (有效期為一分鐘)");//設定郵件的內容 mail.send();//傳送 } catch (EmailException e) { e.printStackTrace(); } } }
//傳送驗證碼,並使用session儲存設定值 public void vcode(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException{ String email = request.getParameter("email"); String code = new EmailUtil().achieveCode(); //生成隨機密碼 try { new EmailUtil().sendAuthCodeEmail(email,code); HttpSession session = request.getSession(); session.setAttribute("Vcode", code); session.setMaxInactiveInterval(60); //設定session有效期 60秒 response.getWriter().write("{\"exist\":"+true+"}"); } catch (Exception e) { response.getWriter().write("{\"exist\":"+false+"}"); e.printStackTrace(); } }
$("#send").click(function(){
var email =$("#email").val(); //獲取使用者輸入的郵箱
var myreg = /^([\.a-zA-Z0-9_-])[email protected]([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
if(email.length==0 || !myreg.test(email)){ //驗證郵箱是否正確
return false;
}
$.post(
"UsrServlet/vcode", //進行傳送驗證碼處理的方法
{"email":email}, //以json格式傳遞引數
function(responseData) { //訪問成功後的回撥函式,responseData:響應引數
if (responseData.exist) {
new invokeSettime("#send"); //傳送正確後,呼叫方法,開始倒計時
$("#showTooltips").attr("href","javascript:");
$("#showTooltips").css("background-color","rgba(26,173,25,0.5)");
} else {
console.log("驗證碼傳送失敗"); //控制檯列印除錯
}
},
"json" //響應資料為json格式
);
});