javamail實現(xiàn)注冊激活郵件
本文實例為大家分享了javamail注冊激活郵件的具體代碼,供大家參考,具體內(nèi)容如下
需要的jar包
1.MySQL驅(qū)動包
2.mail.jar包
SMTP和POP3協(xié)議概述
SMTP協(xié)議稱為簡單郵件傳輸協(xié)議,是一組用于從原地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。SMTP協(xié)議屬于TCP/IP的協(xié)議簇,SMTP是負(fù)責(zé)郵件服務(wù)器之間的寄信的通信協(xié)定 POP3協(xié)議稱為郵局協(xié)議版本3,也是TCP/IP協(xié)議簇的一員,基于POP3協(xié)議的服務(wù)器是用來接收信件的。每個Email地址一般只有一個如果想要同時收取多個郵箱的信件,就需要挨個設(shè)置每個郵箱的POP3服務(wù)器地址。

核心代碼實現(xiàn)
#創(chuàng)建數(shù)據(jù)庫表
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)識是否已經(jīng)激活 0未激活1已激活
code varchar(64) not null
);
//創(chuàng)建數(shù)據(jù)庫對應(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ù)庫操作類UserDao
public class UserDao{
private Connection conn ;
//獲取數(shù)據(jù)庫連接
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();
}
//關(guān)閉數(shù)據(jù)庫連接
public void closeConn(){
if(conn != null){
conn.close();
}
}
}
//一個工具類,用于獲取隨機(jī)code注冊激活碼
public class UUIDUtils{
public static String getUUID(){
return UUID.randomUUID().toString().replace("-","")+UUID.randomUUID().toString().replace("-","");
}
}
//index.jsp前端頁面實現(xiàn)
<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>
//發(fā)送郵件的Utils工具類
public class SendMailUitls{
public static void sendMail(String to,String code){
//session是mail包下的,因為是本地測試,所以第一個參數(shù)直接創(chuàng)建默認(rèn)的即可
Session session = Session.getInstance(new Properties(),new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication("server@store.com", "111");
}
});
//創(chuàng)建郵件對象
Message message = new MimeMessage(session);
//設(shè)置發(fā)件人,這里我創(chuàng)建了一個server@store.com用于發(fā)送郵件
message.setFrom(new InternetAddress("server@store.com"));
message.setRecipient(RecipientType.TO, new InternetAddress(to));
message.setSubject("來自個博網(wǎng)的注冊激活郵件");
message.setContent("<a href='http://localhost:8080/RegistMailWeb/active.do'>點(diǎn)我激活</a>","text/html;charset=utf-8");
//發(fā)送郵件
Transport.send(message);
}
}
//regist.doServlet實現(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());
//注冊
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ù)庫判斷對應(yīng)code是否存在,(這里就不進(jìn)行判斷了,直接進(jìn)行比對)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();
}
}
編寫成功頁面
<html>
<head>
<title>成功激活</title>
</head>
<body>
<script>
window.onload = function(){
alert("已成功激活");
};
</script>
</body>
</html>
web.xml配置兩個Servlet
<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首頁,點(diǎn)擊注冊,可以在foxmail中看到對應(yīng)的email@store.com郵箱中有一封注冊郵箱,點(diǎn)擊該郵箱中的鏈接,就進(jìn)入了激活頁面,然后該注冊的賬號就激活注冊成功了
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
maven pom中內(nèi)置變量及引用的實現(xiàn)
maven其實有很多內(nèi)置變量供開發(fā)著在開發(fā)中使用,本文主要介紹了maven pom中內(nèi)置變量及引用的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-01-01
IDEA導(dǎo)入eclipse項目并且部署到tomcat的步驟詳解
這篇文章主要給大家介紹了關(guān)于IDEA導(dǎo)入eclipse項目并且部署到tomcat的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
Springboot?+redis+谷歌開源Kaptcha實現(xiàn)圖片驗證碼功能
這篇文章主要介紹了Springboot?+redis+?歌開源Kaptcha實現(xiàn)圖片驗證碼功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01

