javamail實(shí)現(xiàn)注冊(cè)激活郵件
本文實(shí)例為大家分享了javamail注冊(cè)激活郵件的具體代碼,供大家參考,具體內(nèi)容如下
需要的jar包
1.MySQL驅(qū)動(dòng)包
2.mail.jar包
SMTP和POP3協(xié)議概述
SMTP協(xié)議稱為簡(jiǎn)單郵件傳輸協(xié)議,是一組用于從原地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。SMTP協(xié)議屬于TCP/IP的協(xié)議簇,SMTP是負(fù)責(zé)郵件服務(wù)器之間的寄信的通信協(xié)定 POP3協(xié)議稱為郵局協(xié)議版本3,也是TCP/IP協(xié)議簇的一員,基于POP3協(xié)議的服務(wù)器是用來接收信件的。每個(gè)Email地址一般只有一個(gè)如果想要同時(shí)收取多個(gè)郵箱的信件,就需要挨個(gè)設(shè)置每個(gè)郵箱的POP3服務(wù)器地址。
核心代碼實(shí)現(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)識(shí)是否已經(jīng)激活 0未激活1已激活 code varchar(64) not null ); //創(chuàng)建數(shù)據(jù)庫對(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ù)庫操作類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); } //注冊(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ù)庫連接 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前端頁面實(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(){ return new PasswordAuthentication("server@store.com", "111"); } }); //創(chuàng)建郵件對(duì)象 Message message = new MimeMessage(session); //設(shè)置發(fā)件人,這里我創(chuàng)建了一個(gè)server@store.com用于發(fā)送郵件 message.setFrom(new InternetAddress("server@store.com")); message.setRecipient(RecipientType.TO, new InternetAddress(to)); message.setSubject("來自個(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ù)庫判斷對(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(); } }
編寫成功頁面
<html> <head> <title>成功激活</title> </head> <body> <script> window.onload = function(){ alert("已成功激活"); }; </script> </body> </html>
web.xml配置兩個(gè)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)擊注冊(cè),可以在foxmail中看到對(duì)應(yīng)的email@store.com郵箱中有一封注冊(cè)郵箱,點(diǎn)擊該郵箱中的鏈接,就進(jìn)入了激活頁面,然后該注冊(cè)的賬號(hào)就激活注冊(cè)成功了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java解壓縮zip - 解壓縮多個(gè)文件或文件夾實(shí)例
本篇文章主要介紹了Java解壓縮zip - 解壓縮多個(gè)文件或文件夾實(shí)例,非常具有實(shí)用價(jià)值,有需要的可以了解一下。2016-12-12使用springMVC通過Filter實(shí)現(xiàn)防止xss注入
這篇文章主要介紹了使用springMVC通過Filter實(shí)現(xiàn)防止xss注入的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07spring注解識(shí)別一個(gè)接口的多個(gè)實(shí)現(xiàn)類方法
下面小編就為大家?guī)硪黄猻pring注解識(shí)別一個(gè)接口的多個(gè)實(shí)現(xiàn)類方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04Springboot動(dòng)態(tài)切換數(shù)據(jù)源的具體實(shí)現(xiàn)與原理分析
目前有個(gè)需求,需要使用不同的數(shù)據(jù)源,例如某業(yè)務(wù)要用A數(shù)據(jù)源,另一個(gè)業(yè)務(wù)要用B數(shù)據(jù)源,所以下面這篇文章主要給大家介紹了關(guān)于Springboot動(dòng)態(tài)切換數(shù)據(jù)源的具體實(shí)現(xiàn)與原理分析,需要的朋友可以參考下2021-12-12Java在創(chuàng)建文件時(shí)指定編碼的實(shí)現(xiàn)方法
本文主要介紹了Java在創(chuàng)建文件時(shí)指定編碼的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07java程序員自己的圖片轉(zhuǎn)文字OCR識(shí)圖工具分享
這篇文章主要介紹了java程序員自己的圖片轉(zhuǎn)文字OCR識(shí)圖工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11