本文實(shí)例為大家分享了javamail注冊(cè)激活郵件的具體代碼,供大家參考,具體內(nèi)容如下
需要的jar包
1.MySQL驅(qū)動(dòng)包
2.mail.jar包
SMTP和POP3協(xié)議概述
SMTP協(xié)議稱為簡(jiǎn)單郵件傳輸協(xié)議,是一組用于從原地址到目的地址傳送郵件的規(guī)則,由它來(lái)控制信件的中轉(zhuǎn)方式。SMTP協(xié)議屬于TCP/IP的協(xié)議簇,SMTP是負(fù)責(zé)郵件服務(wù)器之間的寄信的通信協(xié)定 POP3協(xié)議稱為郵局協(xié)議版本3,也是TCP/IP協(xié)議簇的一員,基于POP3協(xié)議的服務(wù)器是用來(lái)接收信件的。每個(gè)Email地址一般只有一個(gè)如果想要同時(shí)收取多個(gè)郵箱的信件,就需要挨個(gè)設(shè)置每個(gè)郵箱的POP3服務(wù)器地址。
核心代碼實(shí)現(xiàn)
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
#創(chuàng)建數(shù)據(jù)庫(kù)表 create database javamail; use javamail; create table user( id int primary key auto_increment, username varchar( 30 ) not null , password varchar( 30 ) not null , nickname varchar( 30 ) not null , email varchar( 30 ) not null , state int default 0 , #標(biāo)識(shí)是否已經(jīng)激活 0 未激活 1 已激活 code varchar( 64 ) not null ); //創(chuàng)建數(shù)據(jù)庫(kù)對(duì)應(yīng)的javabean public class UserBean{ private Integer id; private String username; private String password; private String nickname; private String email; private Integer state; private String code; //省略setter and getter } //數(shù)據(jù)庫(kù)操作類UserDao public class UserDao{ private Connection conn ; //獲取數(shù)據(jù)庫(kù)連接 public void getConn(){ Class.forName( "com.mysql.jdbc.Driver" ); String url = "mysql:jdbc://localhost:3306/javamail" ; String rootname = "root" ; String rootpass = "chengxi" ; conn = DriverManager.getConnection(url,rootname,rootpass); } //注冊(cè) public void regist(UserBean user){ String sql = "insert into user(username,password,nickname,email,code) values(?,?,?,?,?)" ; PreparedStatement pstmt = conn.preparedCall(sql); pstmt.setString( 1 ,user.getUsername()); pstmt.setString( 2 ,user.getPassword()); pstmt.setString( 3 ,user.getNickname()); pstmt.setStirng( 4 ,user.getEmail()); pstmt.setString( 5 ,user.getCode()); pstmt.executeUpdate(); } //激活 public void activeByCode(String code){ String sql = "update user set state=1,code=null where code=?" ; PreparedStatement pstmt = conn.preparedCall(sql); pstmt.setString( 1 ,code); pstmt.executeUpdate(); } //關(guān)閉數(shù)據(jù)庫(kù)連接 public void closeConn(){ if (conn != null ){ conn.close(); } } } //一個(gè)工具類,用于獲取隨機(jī)code注冊(cè)激活碼 public class UUIDUtils{ public static String getUUID(){ return UUID.randomUUID().toString().replace( "-" , "" )+UUID.randomUUID().toString().replace( "-" , "" ); } } //index.jsp前端頁(yè)面實(shí)現(xiàn) <form action= "<%=request.getContextPath()%>/regist.do" method= "post" > <tr> <td><label for = "username" >賬號(hào)</label></td> <td><input type= "text" name= "username" /></td> </tr> <tr> <td><label for = "password" >密碼</label></td> <td><input type= "text" name= "password" /></td> </tr> <tr> <td><label for = "nickname" >昵稱</label></td> <td><input type= "text" name= "nickname" /></td> </tr> <tr> <td><label for = "email" >郵箱</label></td> <td><input type= "text" name= "email" /></td> </tr> <tr> <td><input type= "submit" value= "注冊(cè)" /></td> <td><input type= "reset" name= "重寫" /></td> </tr> </form> //發(fā)送郵件的Utils工具類 public class SendMailUitls{ public static void sendMail(String to,String code){ //session是mail包下的,因?yàn)槭潜镜販y(cè)試,所以第一個(gè)參數(shù)直接創(chuàng)建默認(rèn)的即可 Session session = Session.getInstance( new Properties(), new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication(){ } }); //創(chuàng)建郵件對(duì)象 Message message = new MimeMessage(session); //設(shè)置發(fā)件人,這里我創(chuàng)建了一個(gè)[email protected]用于發(fā)送郵件 message.setRecipient(RecipientType.TO, new InternetAddress(to)); message.setSubject( "來(lái)自個(gè)博網(wǎng)的注冊(cè)激活郵件" ); message.setContent( "<a href='http://localhost:8080/RegistMailWeb/active.do'>點(diǎn)我激活</a>" , "text/html;charset=utf-8" ); //發(fā)送郵件 Transport.send(message); } } //regist.doServlet實(shí)現(xiàn) public class RegistServlet extends HttpServlet{ public void init(){ super .init(); } public void service(HttpServletRequest request,HttpServletResponse response){ //獲取數(shù)據(jù) String username = request.getParameter( "username" ); String password = request.getParameter( "password" ); String nickname = request.getParameter( "nickname" ); String email = request.getParameter( "email" ); //封裝數(shù)據(jù) UserBean user = new UserBean(); user.setUsername(username); user.setPassword(password); user.setNickname(nickname); user.setEmail(email); user.setCode(UUIDUtils.getUUID()); //注冊(cè) UserDao dao = new UserDao(); dao.getConn(); dao.regist(user); dao.closeConn(); //發(fā)送郵件 SendMailUtils.sendMail(email,user.getCode()); } public void destroy(){ super .desroy(); } } //創(chuàng)建active.do Servlet用于激活郵箱 public class ActiveServlet HttpServlet{ public void init(){ super .init(); } public void service(HttpServletRequest request,HttpServletResponse response){ //獲取數(shù)據(jù) String code = request.getParameter( "code" ); //數(shù)據(jù)庫(kù)判斷對(duì)應(yīng)code是否存在,(這里就不進(jìn)行判斷了,直接進(jìn)行比對(duì))state=1&code=null代表激活 UserDao dao = new UserDao(); dao.activeByCode(code); //重定向success.jsp request.getRequestDispatcher( "/WEB-INF/success.jsp" ).forward(request,response); } public void destroy(){ super .destroy(); } } |
編寫成功頁(yè)面
1
2
3
4
5
6
7
8
9
10
11
12
|
< html > < head > < title >成功激活</ title > </ head > < body > < script > window.onload = function(){ alert("已成功激活"); }; </ script > </ body > </ html > |
web.xml配置兩個(gè)Servlet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
< servlet > < servlet-name >RegistServlet</ servlet-name > < servlet-class >com.servlet.RegistServlet</ servlet-class > </ servlet > < servlet-mapping > < servlet-name >RegistServlet</ servlet-name > < url-pattern >/regist.do</ url-pattern > </ servlet-mapping > < servlet > < servlet-name >ActiveServlet</ servlet-name > < servlet-class >com.servlet.ActiveServlet</ servlet-class > </ servlet > < servlet-mapping > < servlet-name >ActiveServlet</ servlet-name > < url-pattern >/active.do</ url-pattern > |
效果
打開tomcat服務(wù)器和foxmail郵件服務(wù)器,然后進(jìn)入該web首頁(yè),點(diǎn)擊注冊(cè),可以在foxmail中看到對(duì)應(yīng)的[email protected]郵箱中有一封注冊(cè)郵箱,點(diǎn)擊該郵箱中的鏈接,就進(jìn)入了激活頁(yè)面,然后該注冊(cè)的賬號(hào)就激活注冊(cè)成功了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。