1. 程式人生 > >使用javamail傳送驗證郵件

使用javamail傳送驗證郵件

一般我們註冊賬號時,網站通常會要求我們填寫一個郵箱地址,隨後傳送一封驗證郵件到該郵箱,我們點選郵件裡的驗證連結(或者填寫傳送的驗證碼)就可以完成註冊。

這個功能可以通過javamail實現.

首先原材料:下載javamail的jar包,一般為javax.mail.jar之類的.

                     下載jaf的包,一般為activation,jar之類的.

將兩個包新增到專案web-inf中lib下並新增路徑.

接下來理一下流程:首先需要一個註冊網頁register.jsp,當用戶提交了註冊網頁首先判斷使用者名稱是否重複,郵箱符合標準,兩次輸入密碼一樣之類的(這一部分其實用ajax寫的比較人性化,此處暫且不表),然後將該使用者名稱壓入資料庫,並且標記該條資料的sign為0,隨後傳送郵件到使用者輸入的郵箱(這一部分就是javamail的工作啦~~),使用者郵箱點選連結跳轉到一個處理頁面,在處理頁面首先拿get方法的url+自己想要加的內容(比如直接是使用者名稱或者一串加密過的數字,這裡方便直接用使用者名稱),獲得使用者名稱並且查詢資料庫,若存在並且sign為0,那麼sign為1(這時這條資料就是真正的使用者),也可以再將這個使用者新增到新一個數據庫,這樣可以避免以後判斷sign,同時跳轉到登入介面login.jsp,如果存在並且sign為1,說明重複註冊(比如使用者點了這個連結兩次...),如果不存在直接拒絕,跳轉回register.jsp

傳送郵件的關鍵程式碼如下:

Properties pros=new Properties();
Transport transport;
pros.put("mail.smtp.host", "smtp.163.com"); //我是用163郵箱發的郵件,所以smtp主機是smtp.163.com,用其他郵箱需要查一下smtp主機,一般為smtp.***.com
pros.put("mail.smtp.auth","true");
Session sendmailsession=Session.getInstance(pros);
sendmailsession.setDebug(true);
Message newMessage=new MimeMessage(sendmailsession);
newMessage.setFrom(new InternetAddress("********@163.com"));//這裡輸入傳送的郵箱地址
newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//這裡的to替換成使用者輸入的收件箱,也就是String to=request.getParameter("email")之類的
newMessage.setSubject(subject);//輸入主題(subject是一個字串)
newMessage.setSentDate(new Date());//輸入日期
newMessage.setContent(emailContent.toString(),"text/html;charset=UTF-8");//或者setText("一段字串")
transport=sendmailsession.getTransport("smtp");//此處不變
transport.connect("smtp.163.com","郵箱地址匿了","授權密碼匿了");//這裡比較麻煩,第一個是傳送郵件的代理主機,第二個是傳送郵箱的地址,第三個是傳送郵箱的授權密碼(而不是登入密碼)
transport.sendMessage(newMessage, newMessage.getAllRecipients());
transport.close();

setText方法是傳一段文字,比如我只是要傳一段話,那麼直接用setText比較方便

setContent適用於傳html文字,比如上文所說的連結,比如字型大小的變化,顏色的變化,說白了就是更高階,但是必須用html標籤拼接起來.

比如我這裡的拼接方式:

String message="http://localhost:8080/changshi3/check3.jsp?username="+request.getParameter("username");//生成url地址和傳遞引數(這裡就直接用本地了)
StringBuilder emailContent = new StringBuilder()  
        .append("您已經註冊成功:<span style=\"color: #F3750F;font-weight: bold;font-size: larger;font-family: cursive;\">") 
        .append("<a href=\"")
        .append(message)
        .append("\">") 
        .append("點選此連結跳轉")
        .append("</a>")
        .append("</span><br/>")  
        .append("此連結只能使用一次,驗證成功自動失效;<br/>")  
        .append("<div style=\"font-size: small;color: gray;\">")  
        .append("(請在10分鐘內完成驗證,10分鐘後驗證碼失效,您需要重新進行驗證。感謝您的支援。)<br/>")  
        .append("如果您錯誤的收到了本電子郵件,請您忽略上述內容<br/>").append("</div>");  
效果圖:註冊

提示

郵箱:

需要注意的是傳送郵箱必須是開啟smtp服務,至少預設126和163是不開啟的,所以需要開啟並且密碼是授權密碼(開啟smtp服務時建立的密碼),同時注意傳送內容不要為空,以防當成垃圾郵件.