幾乎每個網站或論壇之類的用戶注冊后都需要通過發送郵件到郵箱激活用戶,如何激活郵箱吶?
設計激活步驟:
1、發送激活操作鏈接地址至用戶郵箱。
2、用戶至郵箱查收郵件。
3、用戶點擊鏈接,跳轉至成功頁面(修改激活狀態),激活成功。
實現:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
/** * 發送郵件 * * @param request * @return */ @RequestMapping (value = "/sendEmail.jhtml" ) @ResponseBody public String sendEmail(HttpServletRequest request) { DynamicParams params = new DynamicParams(request); StringBuilder builder = new StringBuilder(); StringBuffer url = new StringBuffer(); String type = params.getString( "type" ); Long uid = params.getLong( "id" ); User user = userManager.find(uid); String subject = "" ; // 判斷是否已激活 if ( "1" .equals(String.valueOf(user.getEmailStatus()))) { return errMsg(); } String contextPath = request.getContextPath(); String rUrl = String.valueOf(request.getRequestURL()); url.append(rUrl.substring( 0 , rUrl.indexOf(contextPath))); url.append(contextPath + "/account" ); // 郵箱激活 // url.append("/activateEmail.jhtml?email=" + user.getEmail() + // "&id=" + uid + "&mode=activate"); url.append( "/activateEmail.jhtml?id=" + uid + "&mode=activate" ); // 正文 builder.append( "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" </head><body>" ); builder.append( "請點擊下方鏈接激活您的郵箱,完成激活郵箱的操作!" ); builder.append( "<br/><br/>" ); builder.append( "<a href=\"" + url + "\">" ); builder.append(url); builder.append( "</a>" ); builder.append( "</body></html>" ); subject = "郵箱地址激活 - xxxx" ; MailSender.mailSimple(user.getEmail(), subject, builder.toString(), false , null ); return successMsg(); } /** * 激活郵箱 * * @param request * @return */ @RequestMapping (value = "/activateEmail.jhtml" ) public String activateEmail(HttpServletRequest request, Model model) { DynamicParams params = new DynamicParams(request); // 激活之前查詢 User user = userManager.find(params.getLong( "id" )); if ( "1" .equals(String.valueOf(user.getEmailStatus()))) { // 已激活 model.addAttribute( "flag" , false ); } else { // 未激活 userManager.activateEmail(params); // 激活之后查詢 user = userManager.find(params.getLong( "id" )); request.getSession().setAttribute( "sessionUser" , user); model.addAttribute( "mode" , params.getString( "mode" )); model.addAttribute( "flag" , true ); } return "site/modules/account/activateSuccess" ; } |
MailSender.mailSimple(user.getEmail(), subject, builder.toString(),false, null);即為發送郵件工具類,如有不明白可參考我之前的文章(spring mail發送郵件)
忘記密碼(重置密碼)
背景:同樣是各大網站都會擁有的一個功能,通過發送驗證碼到用戶注冊的郵箱重置密碼
設計:1)輸入用戶名/手機號碼/郵箱,驗證碼。
2)用戶選擇手機驗證或郵箱驗證,發送驗證碼到手機或郵箱。如果用戶郵箱未激活,則不允許郵箱驗證。
3)用戶輸入驗證碼成功,進入密碼重新設置頁面。
4)重置密碼
流程:
實現:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
/** * 發送郵件 * * @param request * @return */ @RequestMapping (value = "/sendEmail.jhtml" ) @ResponseBody public String sendEmail(HttpServletRequest request) { DynamicParams params = new DynamicParams(request); StringBuilder builder = new StringBuilder(); StringBuffer url = new StringBuffer(); String type = params.getString( "type" ); Long uid = params.getLong( "id" ); User user = userManager.find(uid); String subject = "" ; // type = forget 密碼重置 String verifyCode = VerifyCodeUtils.generateVerifyCode( 4 ); request.getSession().setAttribute( "resetCertCode" , verifyCode); url.append( "<font color='red'>" + verifyCode + "</font>" ); // 正文 builder.append( "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body>" ); builder.append( "要使用新的密碼, 請將已下字符輸入驗證框中,完成重置密碼的操作!" ); builder.append( "<br/><br/>" ); builder.append( "<div>" + url + "</div>" ); builder.append( "</body></html>" ); subject = "密碼重置 - xxxx" ; MailSender.mailSimple(user.getEmail(), subject, builder.toString(), false , null ); return successMsg(); } |
至此,激活郵箱和忘記密碼功能已初步完成!希望對大家的學習有所幫助,大家可以動手實現激活郵箱并找回密碼。