Java实现邮箱验证

来源:互联网 发布:东华软件西安分公司 编辑:程序博客网 时间:2024/05/16 01:15


一.创建数据库foxmail,再创建user表


CREATE DATABASE Foxmail;

USE Foxmail;

CREATE TABLE `user`(
`uid` INT PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(20) DEFAULT NULL,
`password` VARCHAR(20) DEFAULT NULL,
`nickname` VARCHAR(20) DEFAULT NULL,
`email` VARCHAR(30) DEFAULT NULL,
`state` INT(11) DEFAULT NULL,
`code` VARCHAR(64) DEFAULT NULL


)ENGINE=INNODB DEFAULT CHARSET=utf8;

 

二.配置环境,安装软件

 

eyoumailserversetup.exe  :易邮邮件服务器

Foxmail.exe  :Foxmail客户端

 

 1.创建邮箱账号

 

 

 

 

2.登录Foxmail客户端

 

 

三.使用eclipse编写代码

 1.新建一个web项目

 

 2.实体类domain

代码如下:----User.java

 

 1 package com.xigua.domain; 2  3 public class User { 4  5     private Integer uid; 6     private String username; 7     private String password; 8     private String nickname; 9     private String email;10     private Integer state;11     private String code;12     public Integer getUid() {13         return uid;14     }15     public void setUid(Integer uid) {16         this.uid = uid;17     }18     public String getUsername() {19         return username;20     }21     public void setUsername(String username) {22         this.username = username;23     }24     public String getPassword() {25         return password;26     }27     public void setPassword(String password) {28         this.password = password;29     }30     public String getNickname() {31         return nickname;32     }33     public void setNickname(String nickname) {34         this.nickname = nickname;35     }36     public String getEmail() {37         return email;38     }39     public void setEmail(String email) {40         this.email = email;41     }42     public Integer getState() {43         return state;44     }45     public void setState(Integer state) {46         this.state = state;47     }48     public String getCode() {49         return code;50     }51     public void setCode(String code) {52         this.code = code;53     }54     55     56     57 }

 

3.C3P0.config.xml代码

 

 1 <?xml version="1.0" encoding="UTF-8"?> 2  3  4 <c3p0-config> 5     <default-config> 6         <property name="driverClass">com.mysql.jdbc.Driver</property> 7         <property name="jdbcUrl">jdbc:mysql://localhost:3306/foxmail</property> 8         <property name="user">root</property> 9         <property name="password">123</property>10         11         <property name="acquireIncrement">5</property>12         <property name="initialPoolSize">10</property>13         <property name="minPoolSize">5</property>14         <property name="maxPoolSize">20</property>15         16         17     </default-config>18 19 </c3p0-config>

 

 4.编写utils包内的工具类

 

 C3P0Util.java 代码如下:

 1 package com.xigua.utils; 2  3 import javax.sql.DataSource; 4  5 import com.mchange.v2.c3p0.ComboPooledDataSource; 6  7 public class C3P0Util { 8     /** 9      * 配置文件的名字只能叫c3p0-config.xml ,位置只能放在src的根目录下�??10      * 默认是去找default-config的配�?11      */12     private static ComboPooledDataSource dataSource=new ComboPooledDataSource();13     14     public static DataSource getDataSource(){15         return dataSource;16         17     }18 }19 20     

  JDBCUtils.java 代码如下:

 1 package com.xigua.utils; 2  3 import java.beans.PropertyVetoException; 4 import java.sql.Connection; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 10 import com.mchange.v2.c3p0.ComboPooledDataSource;11 import com.mchange.v2.c3p0.DataSources;12 13 public class JDBCUtils {14     private static String url = "jdbc:mysql://localhost:3306/foxmail";15     private static String user = "root";16     private static String passwd = "123";17     private static String driver = "com.mysql.jdbc.Driver";18    19     public static ComboPooledDataSource getDataSource() throws Exception{20         ComboPooledDataSource cpds = new ComboPooledDataSource();21         cpds.setDriverClass( driver);22         cpds.setJdbcUrl( url );23         cpds.setUser(user);                                  24         cpds.setPassword(passwd);  25         cpds.setMinPoolSize(5);                                     26         cpds.setAcquireIncrement(5);27         cpds.setMaxPoolSize(30);28         cpds.setMaxIdleTime(60);29         return cpds;30     }31 }

MailUtils.java代码如下:

 1 package com.xigua.utils; 2  3 import java.util.Properties; 4  5 import javax.mail.Authenticator; 6 import javax.mail.Message.RecipientType; 7 import javax.mail.MessagingException; 8 import javax.mail.PasswordAuthentication; 9 import javax.mail.Session;10 import javax.mail.Transport;11 import javax.mail.internet.AddressException;12 import javax.mail.internet.InternetAddress;13 import javax.mail.internet.MimeMessage;14 15 public class MailUtils {16     /**17      * 18      * @param to:代表给谁发邮件19      * @param code:代表激活码是什么20      * @throws MessagingException 21      * @throws AddressException 22      */23     24     public static void sendMail(String to,String code) throws Exception{25         //1.创建连接对象,连接到邮箱服务器26         Properties props = new Properties();27         28         Session session=Session.getInstance(props, new Authenticator() {29 30             @Override31             protected PasswordAuthentication getPasswordAuthentication() {32                 /**创建一个邮箱账号:service@mac.com  12333                  * 默认使用该账号发送邮件34                  */35                 //return new PasswordAuthentication("service@mac.com", "123");36                 return new PasswordAuthentication("自己的QQ邮箱", "授权编码");37             }38             39             40         });41         42         //2.创建邮件对象43         MimeMessage message = new MimeMessage(session);44           //2.1设置发件人45             /**46              * service@mac.com是一个字符串,47              * 将字符串转换成地址:new InternetAddress("service@mac.com")48              */49            message.setFrom(new InternetAddress("自己的QQ邮箱"));50         51          //2.2设置收件人52          message.setRecipient(RecipientType.TO, new InternetAddress(to));53         54          //2.3设置邮件主题55          message.setSubject("这是一封激活邮件!");56         57          //2.4设置邮件正文58          /**59           *   ?code="+code+"  :表示从外面传入一个激活码60           */61          message.setContent("<h1>来自西瓜瓜购物网站的激活邮件,激活请点击以下链接:</h1> <h3>  <a href='http://localhost:8080/Foxmail/ActiveServlet?code="+code+"'> http://localhost:8080/Foxmail/ActiveServlet?code="+code+" </a></h3>", "text/html;charset=UTF-8");62         63          //3.发送一封激活邮件64          Transport.send(message);65     }66     67     68     69 }

UUIDUtils.java代码如下:

 1 package com.xigua.utils; 2 import java.util.UUID; 3 public class UUIDUtils { 4   //生成随机字符串的工具类 5     public static String getUUID(){ 6         //取消短- 7         return UUID.randomUUID().toString().replace("-", ""); 8      9     }10     11 }

 

5.编写service包内代码

 

 UserService接口:

 1 package com.xigua.service; 2  3 import com.xigua.domain.User; 4  5 public interface UserService { 6     void regist(User user) throws Exception; 7  8     User findByCode(String code) throws Exception; 9 10     void update(User user)throws Exception;11 }

 

UserServiceImpl实现类:

 1 package com.xigua.service.impl; 2  3 import com.xigua.dao.UserDao; 4 import com.xigua.dao.impl.UserDaoImpl; 5 import com.xigua.domain.User; 6 import com.xigua.service.UserService; 7 import com.xigua.utils.MailUtils; 8  9 public class UserServiceImpl implements UserService {10 11     UserDao userDao = new UserDaoImpl();12     13     //业务层用户注册的方法:14     public void regist(User user) throws Exception {15         //将数据存入到数据库16         userDao.regist(user);17         18         //发送一封激活邮件19           /**20            * 直接用发写好的工具类发送邮件21            */22        MailUtils.sendMail(user.getEmail(), user.getCode());    23     24     }25 26     @Override27     //根据激活码查找用户28     public User findByCode(String code) throws Exception {29         30         return userDao.findByCode(code);31     }32 33     @Override34     //业务层修改用户的方法35     public void update(User user) throws Exception {36         userDao.update(user);37         38     }39 40 }

 

 6.编写dao包内代码

 

 UserDao接口:

 1 package com.xigua.dao; 2  3 import java.sql.SQLException; 4  5 import com.xigua.domain.User; 6  7 public interface UserDao { 8  9     void regist(User user) throws Exception;10 11     User findByCode(String code) throws Exception;12 13     void update(User user)throws Exception;14 15 }

 

UserDaoImpl实现类:

 1 package com.xigua.dao.impl; 2  3  4  5 import java.sql.SQLException; 6  7 import org.apache.commons.dbutils.QueryRunner; 8 import org.apache.commons.dbutils.handlers.BeanHandler; 9 10 import com.xigua.dao.UserDao;11 import com.xigua.domain.User;12 13 import com.xigua.utils.JDBCUtils;14 15 16 public class UserDaoImpl implements UserDao {17 18     //Dao中保存用户的方法19     public void regist(User user) throws Exception {20         21         //QueryRunner queryRunner = new QueryRunner(C3P0Util.getDataSource());22         QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());23         //写SQL语句24         String sql="insert into user values(?,?,?,?,?,?,?);";25          26       Object[] params={user.getUid(),user.getUsername(),user.getPassword(),user.getNickname(),user.getEmail(),user.getState(),user.getCode()};27     28       // 更新语句29       queryRunner.update(sql,params);30       31     }32 33     @Override34     //Dao中根据激活码来查询用户的方法35     public User findByCode(String code) throws Exception {36         QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());37         String sql="select * from user where code = ?";38         User user=queryRunner.query(sql,new BeanHandler<User>(User.class), code);39         return user;40     }41 42     @Override43     //Dao中修改用户的方法44     public void update(User user) throws Exception {45         QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());46         String sql="update user set username=?,password=?,nickname=?,email=?,state=?,code=? where uid=?;";47         48           Object[] params={user.getUsername(),user.getPassword(),user.getNickname(),user.getEmail(),user.getState(),user.getCode(),user.getUid()};49           // 更新语句50           queryRunner.update(sql,params);51         52     }53 }

  7.编写action包内代码

新建两个Servlet,不是class

 

 

ActiveServlet代码:

 1 package com.xigua.action; 2  3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8  9 import com.xigua.domain.User;10 import com.xigua.service.UserService;11 import com.xigua.service.impl.UserServiceImpl;12 13 public class ActiveServlet extends HttpServlet {14     private static final long serialVersionUID = 1L;15  16     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {17     try {18         //接收激活码19         String code = request.getParameter("code");20         //根据激活码查用户21         System.out.println("code值:"+code);22         UserService userService = new UserServiceImpl();23         24             User user=userService.findByCode(code);25             26             if(user!=null){27                 //已经查询到,修改用户状态    28                 user.setState(1);//状态变为129                 user.setCode(null);//状态码,点击一次就失效了30                 userService.update(user);31                 request.setAttribute("msg", "恭喜你已经激活成功!请登录~");32 33             }else{34                 //根据激活码没有查询到该用户35                 request.setAttribute("msg", "您的激活码有误,请重新激活!");36             }37           //页面跳转38             request.getRequestDispatcher("/msg.jsp").forward(request, response);39     40         } catch (Exception e) {41             42             e.printStackTrace();43         }44     }45     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {46         47         doGet(request, response);48     }49 50 }

 

 RegistServlet代码:

 

 1 package com.xigua.action; 2  3 import java.io.IOException; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8  9 import com.xigua.domain.User;10 import com.xigua.service.UserService;11 import com.xigua.service.impl.UserServiceImpl;12 import com.xigua.utils.UUIDUtils;13 14 public class RegistServlet extends HttpServlet {15     private static final long serialVersionUID = 1L;16 17     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {18     try {19         //接收数据20         //处理中文乱码21         request.setCharacterEncoding("UTF-8");22         23         String username = request.getParameter("username");24         String password = request.getParameter("password");25         String nickname = request.getParameter("nickname");26         String email = request.getParameter("email");27         28         //包装数据29         User user=new User();30         user.setUsername(username);31         user.setPassword(password);32         user.setNickname(nickname);33         user.setEmail(email);34        35         user.setState(0);  //0未激活    1已激活36       //  UUIDUtils.getUUID()默认32位,若不够,在+32位37         String code = UUIDUtils.getUUID()+UUIDUtils.getUUID();38         39         user.setCode(code);40         41         //调用业务层处理数据42         UserService userService = new UserServiceImpl();43      44             userService.regist(user);45             46         //页面跳转    47             request.setAttribute("msg", "您已经注册成功!请去邮箱激活~");48             request.getRequestDispatcher("/msg.jsp").forward(request, response);49     50         } catch (Exception e) {51             // TODO Auto-generated catch block52             e.printStackTrace();53         }54     }55 56     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {57         58         doGet(request, response);59     }60 61 }

 8.编写JSP代码

注册: regist.jsp 代码

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>注册界面</title> 8 </head> 9 <body>10     <h1>用户注册</h1>11         12         <form action="${pageContext.request.contextPath }/RegistServlet" method="post">13           <table >14               <tr>15                 <td>用户名</td>16                 <td><input type="text" name="username"/></td>17               </tr>18                  <tr>19                 <td>密码</td>20                 <td><input type="password" name="password"/></td>21               </tr>22                  <tr>23                 <td>昵称</td>24                 <td><input type="text" name="nickname"/></td>25               </tr>26                  <tr>27                 <td>邮箱</td>28                 <td><input type="text" name="email"/></td>29               </tr>30                  <tr>31                 32                 <td colspan="2">33                    <input type="submit" value="注册"/>34                    <input type="reset" value="重置"/>35                 </td>36               </tr>37            38            39            </table>40         41         </form>42 43 44 45 </body>46 </html>

 

激活界面:msg.jsp代码

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>激活界面</title> 8 </head> 9 <body>10 <h1>${ msg }</h1>11 </body>12 </html>

 

 后续更新中……

 有错请评论下方,谢谢~

 

原创粉丝点击