注冊某個網站一般都需要郵箱激活:
注冊后,該網站會給你填寫的郵箱發送一條激活信息,點擊對應的鏈接即可完成激活。
激活成功后,就可以正常登錄該網站了。
而該業務就可以通過Java代碼實現:
關於郵件激活這一塊,老實說本來不打算專門花一晚上時間學習的。
畢竟這種類型的知識點需要用到的時候相對而言很少,就算遇到了通過網絡也能解決。
后來我想了想,我能夠通過網絡查詢到別人的教程,那為何不能讓別人查詢我的筆記呢?
所以還是花了一個晚上的世界來學習,同時也方便自己以后遇到該需求后查看。
一、Java發送郵箱
既然是發送郵箱,首先需要一個固定的發件郵箱地址,而這個郵箱要開通POP3服務。
我這邊使用的是網易提供的郵箱,通過郵箱的設置可以開啟該服務。
開啟服務后,需要通過手機號驗證;驗證成功會獲得一個授權碼,這個需要記下來。
有了這個授權碼之后,就可以通過Java代碼發送郵箱了,發件人也就是該郵箱。
當然發送郵件的技術挺多的,我這邊使用的是apache提供的commons-mail。
導入該依賴后就可以編寫代碼了。
①創建htmlEamil對象
apache-mail中是使用HtmlEmail這個類來操作郵件的。
②配置服務器參數
setHostName:設定服務器地址。
setAuthentication:翻譯過來就是認證的意思,所以需要輸入郵箱名和授權碼。
③設置發件人和收件人
setCharset:設定編碼格式為“gb2312”,國家制定的一套標准,gb即國標的拼音縮寫。
setFrom:這個是設定發件人,也就是上述獲取授權碼的那個郵箱。
setaddTo:這個是設定收件人,也就是誰注冊就是誰的郵箱,動態獲取,我這邊測試就先用我自己的另一個郵箱代替。
④設置郵件的主題和正文
setSubject:發給用戶的郵件標題,一般都是“XXX網站激活郵件”
setMsg:發送正文,一般都是“恭喜你,注冊成功!請點擊鏈接激活”,再附帶一個鏈接。
我這邊先就隨便填一個鏈接作為測試。
⑤發送郵件
send方法發送郵件,見名知意。
二、發送郵件及測試
1配置文件封裝
和jdbc一樣,可以將上述的代碼封裝到一個工具類中,並且關於服務器的配置信息也封裝到一個配置文件中。
①通過類加載器加載配置文件
MailUtil.class.getClassLoader():獲取MailUtil的類加載器。
getResourceAsStream():翻譯就是以流的方式獲取源文件,參數為配置文件路徑。
這樣就獲取了該配置文件對應的流。
②獲取配置文件中的各個屬性
load():將對應的流加載進properties。
getProperty():獲取參數對應的值。
2發送郵件方法封裝
將發郵件代碼封裝進一個方法中,通過配置文件,使代碼更具有拓展性。
在自定義的工具類MailUtil中創建一個靜態方法sendEamil():
將發送郵件的代碼封裝進該方法中,需要發送郵件時用MailUtil調用sendEamil方法即可。
其中sendEamil方法有兩個參數:
userEamil:用戶注冊時填寫的郵箱,也就是收件人的郵箱。
msg:需要發送給用戶的郵件信息。
3發送郵件代碼補全
那什么時候發送郵件呢?
當用戶激活成功后即可發送郵件:
在UserServlet中,昨天實現了注冊功能,registerFlag作為結果響應給前端。
其中如果為true表示注冊成功,以此作為判斷,可以插入一段代碼實現發送郵件的功能。
注意msg中鏈接的編寫:
用戶在收到郵箱之后點擊該鏈接,會向userServlet發送一個請求。
而這個請求是我們需要接受的,所以路徑填寫userServlet,同時攜帶兩個參數:
methodName:active業務,UserServlet中要有個方法和其對應。
code:當前用戶的code。
4注冊頁面測試
將發送郵件代碼補全后做一個測試,確定是否能夠發送郵件。
在UserServlet中,昨天實現了注冊功能,registerFlag作為結果響應給前端。
其中如果為true表示注冊成功,以此作為判斷,可以插入一段代碼實現發送郵件的功能。
注意msg中鏈接的編寫:
用戶在收到郵箱之后點擊該鏈接,會向userServlet發送一個請求。
而這個請求是我們需要接受的,所以路徑填寫userServlet,同時攜帶兩個參數:
methodName:active業務,UserServlet中要有個方法和其對應。
code:當前用戶的code。
4注冊頁面測試
將發送郵件代碼補全后做一個測試,確定是否能夠發送郵件。
①獲取請求中攜帶的數據
有一個參數code,根據該參數在數據庫中找到對應的用戶並修改其激活狀態。
②激活成功
如果激活成功,重定向到登錄頁面,在此之前先響應一個提示信息提醒用戶。
response.setHeader()即可實現頁面重定向,其有兩個參數:
refresh:刷新的意思。
3;login.html:3即表示為定時3秒再刷新,中間使用分號隔開,login.html即為重新跳轉的頁面。
③激活失敗
原理同上,修改提示信息提醒用戶重新注冊,同時跳轉的頁面是注冊頁面。
3激活業務實現之service和dao層
激活業務本身沒有涉及到多少業務邏輯,所以代碼編寫並不多。
其中對數據庫的操作時修改操作,所以使用template的update方法。
以上就是對於郵箱激活業務的實現:
用戶激活成功,就會跳轉登錄頁面。
用戶激活失敗,就會跳轉注冊頁面,測試階段一般激活失敗可能就是自己編寫的代碼有問題。鄭州試管嬰兒醫院http://yyk.39.net/hospital/fc964_detail.html