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>
后续更新中……
有错请评论下方,谢谢~
- JAVA实现邮箱验证
- java实现邮箱验证
- Java实现邮箱验证
- Java实现邮箱验证
- Java实现邮箱验证
- Java实现邮箱验证
- java实现邮箱验证
- java实现邮箱验证QQ邮箱验证和Foxmail验证
- java实现邮箱验证码
- java实现邮箱验证码
- Java实现邮箱激活验证
- Java实现邮箱激活验证
- Java实现邮箱激活验证
- java 实现邮箱验证注册
- 用java实现邮箱验证
- Java实现邮箱验证码
- java实现邮箱验证码
- Java实现注册邮箱激活验证
- 用openssl生成加密的密码文件脚本
- JavaScript实现简易日历效果
- 分分钟的碎碎念
- 479. Largest Palindrome Product
- MBProgressHUD提示框简单实用的封装
- Java实现邮箱验证
- ccs灰色断点问题的解决
- 656. Coin Path
- Qt+MySQL实现数据库图书管理系统
- spring framwor操作数据库示例spring-jdbc
- (Mac) 命令行生成Dex文件
- 用 GetEnvironmentVariable 获取常用系统环境变量
- 爬虫Scrapy框架的安装配置
- Xcode插件优缺点对比(推荐20款插件)