1. 程式人生 > >Java 郵箱傳送驗證碼且60秒內登入

Java 郵箱傳送驗證碼且60秒內登入

在我們平時上網時,經常會使用郵箱傳送驗證碼,去登入或者註冊。我使用了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格式
						);
				});