如题,我们做网站的时候,往往需要用户注册,很多用户选择用邮箱注册,为了获取用户的真实邮箱和防止恶意注册,可能需要做一个邮箱验证,此篇教程就是讲解如何用Java实现邮箱验证功能。
主要业务逻辑实现过程:
用户填写完成相关信息后,点击注册,系统先将用户记录保存到数据库表中,其中用户状态为未激活。系统发送一封邮件并通知用户去验证,邮件中包含了唯一标识用户的激活码。用户登录邮箱并点击激活链接,系统接收到激活码。系统根据激活码在数据库中找到相应用户,并将用户状态更改为已激活,最后通知用户激活成功。项目结构(JavaWeb项目):
UserDao:数据库操作,包括用户注册、激活状态更改。
JDBCUtils:链接数据库工具类。
User:表的POJO。
ActivationServlet:用于接收激活信息。
RegisterServlet:插入用户信息到数据库中,并发送激活邮件。
项目运行效果截图:
1 . 用户登陆页面:
2 . 用户点击注册按钮后,系统将用户信息保存到数据库中:
此时用户状态是未激活:
3 . 系统向用户发送激活邮件:
4 . 用户点击激活链接,系统将用户状态改为已激活:
代码没有什么难度,看懂了实现原理就只差复制粘贴了,哈哈哈哈,这里只贴出主要部分代码,全部代码见文末链接。
UserDao:数据库操作,包括用户注册、激活状态更改。
package com.hao.validate.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import com.hao.validate.db.JDBCUtils; import com.hao.validate.pojo.User; public class UserDao { /** * 注册 * @param user * @return */ public int insert(User user) { Connection conn = null; PreparedStatement ps = null; int result = 0; try { conn = JDBCUtils.getConnection(); String sql = "insert into user(username,password,email,state,code) values(?,?,?,?,?)"; ps = conn.prepareStatement(sql); ps.setString(1, user.getUsername()); ps.setString(2, user.getPassword()); ps.setString(3, user.getEmail()); ps.setInt(4, user.getState()); ps.setString(5, user.getCode()); result = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return result; } /** * 注册表改为激活状态 * @param code * @return */ public int activation(String code) { Connection conn = null; PreparedStatement ps = null; int result = 0; try { conn = JDBCUtils.getConnection(); String sql = "update user set state=1 where code=?"; ps = conn.prepareStatement(sql); ps.setString(1, code); result = ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return result; } }
User表的sql:
create table `user`( id int(11) primary key auto_increment comment '用户id', username varchar(255) not null comment '用户名', email varchar(255) not null comment '用户邮箱', password varchar(255) not null comment '用户密码', state int(1) not null default 0 comment '用户激活状态:0表示未激活,1表示激活', code varchar(255) not null comment '激活码' )engine=InnoDB default charset=utf8;
ActivationServlet:用于接收激活信息。
package com.hao.validate.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.hao.validate.dao.UserDao; /** * Servlet 用于接收激活信息 */ @WebServlet("/ActivationServlet") public class ActivationServlet extends HttpServlet { private static final long serialVersionUID = 1L; public ActivationServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置请求和响应编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); String code = request.getParameter("code"); UserDao userDao = new UserDao(); if (userDao.activation(code) > 0) { response.getWriter().append("恭喜您,激活成功!"); } else { response.getWriter().append("激活失败,请检查邮箱!"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
RegisterServlet:插入用户信息到数据库中,并发送激活邮件。
package com.hao.validate.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.hao.jmail.SendEmail; import com.hao.random.StringRandom; import com.hao.validate.dao.UserDao; import com.hao.validate.pojo.User; /** * Servlet 注册 插入用户信息到数据库中,并发送激活邮件 */ @WebServlet("/RegisterServlet") public class RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; public RegisterServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置请求和响应编码 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); User user = new User(); user.setUsername(request.getParameter("name")); user.setPassword(request.getParameter("pass")); user.setEmail(request.getParameter("email")); user.setCode(StringRandom.getStringRandom(8));// 随机激活码 user.setState(0);// 初始状态是0 ,0表示未激活 System.out.println(user); // User信息插入到数据库中 UserDao userDao = new UserDao(); if (userDao.insert(user) > 0) { response.getWriter().append("注册成功,请登录邮箱激活账号!"); // 发送邮件 String mailText = "<html><head></head><body><h1>这是一封激活邮件,激活请点击以下链接</h1><h3><a href='http://localhost:8080/tool/ActivationServlet?code=" + user.getCode() + "'>http://localhost:8080/tool/ActivationServlet?code=" + user.getCode() + "</href></h3></body></html>"; SendEmail.Send("发送邮件的邮箱账户", "发送邮件的邮箱密码", user.getEmail(), "备注", "发件人昵称", "主题", mailText); } else { response.getWriter().append("注册失败,请检查相关信息!"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
本篇教程源码地址:
https://github.com/jiahaoit/tool.git