本文實例為大家分享了javamail注冊激活郵件的具體代碼,供大家參考,具體內容如下
需要的jar包
1.MySQL驅動包
2.mail.jar包
SMTP和POP3協議概述
SMTP協議稱為簡單郵件傳輸協議,是一組用于從原地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬于TCP/IP的協議簇,SMTP是負責郵件服務器之間的寄信的通信協定 POP3協議稱為郵局協議版本3,也是TCP/IP協議簇的一員,基于POP3協議的服務器是用來接收信件的。每個Email地址一般只有一個如果想要同時收取多個郵箱的信件,就需要挨個設置每個郵箱的POP3服務器地址。
核心代碼實現
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
|
#創建數據庫表 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 , #標識是否已經激活 0 未激活 1 已激活 code varchar( 64 ) not null ); //創建數據庫對應的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 } //數據庫操作類UserDao public class UserDao{ private Connection conn ; //獲取數據庫連接 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); } //注冊 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(); } //關閉數據庫連接 public void closeConn(){ if (conn != null ){ conn.close(); } } } //一個工具類,用于獲取隨機code注冊激活碼 public class UUIDUtils{ public static String getUUID(){ return UUID.randomUUID().toString().replace( "-" , "" )+UUID.randomUUID().toString().replace( "-" , "" ); } } //index.jsp前端頁面實現 <form action= "<%=request.getContextPath()%>/regist.do" method= "post" > <tr> <td><label for = "username" >賬號</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= "注冊" /></td> <td><input type= "reset" name= "重寫" /></td> </tr> </form> //發送郵件的Utils工具類 public class SendMailUitls{ public static void sendMail(String to,String code){ //session是mail包下的,因為是本地測試,所以第一個參數直接創建默認的即可 Session session = Session.getInstance( new Properties(), new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication(){ } }); //創建郵件對象 Message message = new MimeMessage(session); //設置發件人,這里我創建了一個[email protected]用于發送郵件 message.setRecipient(RecipientType.TO, new InternetAddress(to)); message.setSubject( "來自個博網的注冊激活郵件" ); message.setContent( "<a href='http://localhost:8080/RegistMailWeb/active.do'>點我激活</a>" , "text/html;charset=utf-8" ); //發送郵件 Transport.send(message); } } //regist.doServlet實現 public class RegistServlet extends HttpServlet{ public void init(){ super .init(); } public void service(HttpServletRequest request,HttpServletResponse response){ //獲取數據 String username = request.getParameter( "username" ); String password = request.getParameter( "password" ); String nickname = request.getParameter( "nickname" ); String email = request.getParameter( "email" ); //封裝數據 UserBean user = new UserBean(); user.setUsername(username); user.setPassword(password); user.setNickname(nickname); user.setEmail(email); user.setCode(UUIDUtils.getUUID()); //注冊 UserDao dao = new UserDao(); dao.getConn(); dao.regist(user); dao.closeConn(); //發送郵件 SendMailUtils.sendMail(email,user.getCode()); } public void destroy(){ super .desroy(); } } //創建active.do Servlet用于激活郵箱 public class ActiveServlet HttpServlet{ public void init(){ super .init(); } public void service(HttpServletRequest request,HttpServletResponse response){ //獲取數據 String code = request.getParameter( "code" ); //數據庫判斷對應code是否存在,(這里就不進行判斷了,直接進行比對)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(); } } |
編寫成功頁面
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配置兩個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服務器和foxmail郵件服務器,然后進入該web首頁,點擊注冊,可以在foxmail中看到對應的[email protected]郵箱中有一封注冊郵箱,點擊該郵箱中的鏈接,就進入了激活頁面,然后該注冊的賬號就激活注冊成功了
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。