在很多网站注册的时候,为了验证用户信息的真实合法,往往需要验证用户所填邮件的准确性。形式为:用户注册时填写邮箱,注册完成后,网站会向用户所填邮箱发送一封激活邮件,用户点击激活邮件中的链接后,方可完成注册。 ,自己研究了相关示例后,采用James邮件服务器,进行了简单的实现,步骤如下:

运行环境

使用James邮箱服务器,需要创建相应的用户,Foxmail邮箱客户端,MySQL数据库,MyBatis框架,需要导入javax.mail.jar及javax.activation.jar。

数据库表结构

  用户表t_user有五个字段分别为用户名、密码、邮箱地址、激活码、状态: 
  | username | password | email |code |state |

核心代码

业务实体

public class UserInfo {

private String username;

private String password;

private String email;

private String code;

private int state;

//省略getter/setter

}

数据访问接口

public interface UserDaoMapper {

public int addUser(UserInfo user);   //注册用户

public int updateState(String uuid);   //更新用户状态

}

MyBatis配置文件

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDConfig 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<environments default="development">

<environment id="development">

<transactionManager type="JDBC"/>

<!-- 配置数据库连接信息 -->

<dataSource type="POOLED">

<property name="driver"value="com.mysql.jdbc.Driver" />

<property name="url"value="jdbc:mysql://localhost:3306/test" />

<property name="username"value="root" />

<property name="password"value="123456" />

</dataSource>

</environment>

</environments>

<mappers>

<mapper resource="wanshi/mybatis/UserDaoMapper.xml"/>

</mappers>

</configuration>

MyBatis映射文件

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="wanshi.mybatis.UserDaoMapper">

<!-- 增加用户,此功能用于注册用户的邮箱验证     -->

<insert id="addUser"parameterType="wanshi.mybatis.UserInfo">

insertinto `t_user` (`username`, `password`, `email`, `code`, `state`)values(#{username},#{password},#{email},#{code},#{state})

</insert>

<!-- 更新用户状态,用于注册验证成功后的操作 -->

<update id="updateState"parameterType="int">

updatet_user set state=1 where code=#{uuid}

</update>

</mapper>

业务逻辑接口

public interface UserBiz {

public boolean register(UserInfo user);    //注册用户

public boolean active(String to,String code);    //更新用户状态

//发送激活邮件

public boolean sendMail(String code);

}

业务逻辑实现UserBizImpl.java

importjava.util.Properties;

import java.util.UUID;

import javax.mail.Message;

import javax.mail.Session;

importjavax.mail.Transport;

importjavax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

importwanshi.mybatis.UserDaoMapper;

importwanshi.mybatis.UserInfo;

importwanshi.tools.MyBatisUtil;

/**

* 注册用户并发送邮件验证

* @authorAdministrator

*/

public classUserBizImpl implements UserBiz{

/**

* 注册用户,返回是否成功

*/

@Override

public booleanregister(UserInfo user) {

Boolean result=false;

String code=UUID.randomUUID().toString().replace("-", "");   //生成用户code

user.setCode(code);

int num=MyBatisUtil.getSqlSession().getMapper(UserDaoMapper.class).addUser(user);  //添加用户

if(num>0){

sendMail(user.getEmail(),code);   //向用户发送激活邮件

result=true;

}

return result;

}

/**

* 激活用户

*/

@Override

public booleanactive(String code) {

int num=MyBatisUtil.getSqlSession().getMapper(UserDaoMapper.class).updateState(code);

if(num>0){

return true;

}else{

return false;

}

}

/**

* 发送邮件

*/

@Override

public booleansendMail(String to, String code) {

try {

Properties props = new Properties();

props.put("username", "accp");

props.put("password", "accp");

props.put("mail.transport.protocol", "smtp" );

props.put("mail.smtp.host", "mail.com");

props.put("mail.smtp.port", "25" );

Session mailSession =Session.getDefaultInstance(props);

Message msg = new MimeMessage(mailSession);

msg.setFrom(new InternetAddress("accp@mail.com"));

msg.addRecipients(Message.RecipientType.TO,InternetAddress.parse(to));

msg.setSubject("激活邮件");

msg.setContent("<h1>此邮件为官方激活邮件!请点击下面链接完成激活操作!</h1><h3><ahref='http://localhost:8080/MyDemo/ActiveServlet?code="+code+"'>http://www.wanshi.com/MyDemo/ABCDKJK838845490SERVLET</a></h3>","text/html;charset=UTF-8");

msg.saveChanges();

Transport transport =mailSession.getTransport("smtp");

transport.connect(props.getProperty("mail.smtp.host"), props.getProperty("username"), props.getProperty("password"));

transport.sendMessage(msg, msg.getAllRecipients());

transport.close();

} catch(Exception e) {

e.printStackTrace();

System.out.println(e);

return false;

}

return true;

}

}

注册跳转的Servlet

protected void doGet(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

UserInfouser=new UserInfo();  //封装业务对象

user.setUsername(request.getParameter("username"));

user.setPassword(request.getParameter("password"));

user.setEmail(request.getParameter("email"));

UserBizub=new UserBizImpl();  //实例化业务逻辑对象

boolean isadd=ub.register(user);

response.setContentType("text/html;charset=gb2312");

if(isadd){

response.getWriter().println("注册成功,邮件已发送,请尽快进行验证!");

}else{

response.getWriter().println("注册失败!");

}

}

激活跳转的Servlet

protected void doGet(HttpServletRequest request, HttpServletResponseresponse) throws ServletException, IOException {

//实例化业务逻辑对象

UserBizub=new UserBizImpl();

boolean isadd=ub.active(request.getParameter("code"));

System.out.println(isadd);

response.setContentType("text/html;charset=gb2312");

response.getWriter().println("恭喜,注册成功!");

}

用到的工具类

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {

/**

* 获取SqlSessionFactory

* @return SqlSessionFactory

*/

public staticSqlSessionFactory getSqlSessionFactory() {

String resource = "mybatis-config.xml";

InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

return factory;

}

/**

* 获取SqlSession

* @return SqlSession

*/

public staticSqlSession getSqlSession() {

return getSqlSessionFactory().openSession();

}

/**

* 获取SqlSession

* @param isAutoCommit

*  true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务

*  false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务

* @return SqlSession

*/

public staticSqlSession getSqlSession(boolean isAutoCommit) {

return getSqlSessionFactory().openSession(isAutoCommit);

}

}

前端页面:register.jsp

<%@ page language="java"contentType="text/html; charset=utf-8"   pageEncoding="utf-8"%>

<%@ taglib prefix="c"uri="http://java.sun.com/jstl/core_rt"%>

<%

String path =request.getContextPath();

String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<base href="<%=basePath%>"/>

<title>登录页面</title>

</head>

<body>

<div id="register">

<h1>欢迎登录</h1>

<form id="loginForm"method="post" action="reg">

<table>

<tr>

<td class="field">用户名:</td>

<td><input type="text" id="username"name="username" /></td>

</tr>

<tr>

<td class="field">密码:</td>

<td><input type="password" id="password"name="password"  /></td>

</tr>

<tr>

<td>邮箱:</td>

<td><input type="text" id="email"name="email" /></td>

</tr>

<tr>

<td>&nbsp;</td>

<td><input type="submit" name="submit"value="立即注册" /></td>

</tr>

</table>

</form>

</div>

</body>

</html>

当用户注册时

1、为用户生成随机的激活码(此激活码是添加根据代码规则自动生成的,这里的激活码以随机生成的UUID为例); 
 2、添加一条用户记录; 
 3、向用户发送激活邮件,此处可以添加链接直接跳转到用户邮箱登录界面。

  激活邮件如下:

激活

用户点击邮箱中的链接后,系统根据用户点击链接发来的激活码去数据库中更新与该激活码匹配的用户状态,完成用户注册过程。

Java实现注册时发送激活邮件验证相关推荐

  1. java 发送激活邮件 以qq邮箱为例

    java发送激活邮件 以qq邮箱为例 1.首先发送者邮箱需要开启服务 登录qq邮箱,选择设置--账号,开启以上两个服务.会获得相应的两个授权码 2.以下代码为发送邮件代码 package com.em ...

  2. java实现通过QQ邮箱发送激活邮件 springBoot

    用户邮件激活 通过QQ邮箱发送激活邮件 soringBoot 本文主要介绍了使用java 调用邮箱发送邮件的功能 首先新建一个springboot项目 pom依赖如下 <parent>&l ...

  3. 基于springboot实现注册功能发送激活码至邮箱激活账户登录

    文章目录 激活原理 运行说明(重点) 实例演示(重点) 代码说明 项目结构图 准备工作 emailactivate项目详细代码 common UUIDUtils config DruidDbConfi ...

  4. Django-Celery异步发送激活邮件,以及注意点

    1.Celery介绍 点击查看Celery参考文档 Celery是一个功能完备即插即用的任务队列 Celery适用异步处理问题,比如发送邮件.文件上传,图像处理等等比较耗时的操作,我们可将其异步执行, ...

  5. Java中利用qqemai发送QQ邮件

    最近自己了解下Java中利用mai发送QQ邮件 1.QQ邮箱设置 1.1 进去QQ邮箱-->设置-->账号-->进行设置如下图 以下源码 package test; import j ...

  6. shell脚本编写监控本机内存和硬盘剩余空间,剩余内存小于 500M、根分区剩余空间小于 1000M时,发送报警邮件给 root 管理员

    监控本机内存和硬盘剩余空间,剩余内存小于 500M.根分区剩余空间小于 1000M时,发送报警邮件给 root 管理员 # 创建shell脚本文件 vim free.sh #!/bin/bash di ...

  7. Simple Java Mail的使用,发送qq邮件

    Simple Java Mail的使用,发送qq邮件 第一步 开启SMTP服务 第二步 导入jar包 第三步 简单的使用 四 集中配置,批量发送 第一步 开启SMTP服务 打开qq邮箱,设置-账户 开 ...

  8. 使用 Java Mail 实现注册时邮箱激活验证功能

    最近在做毕设中实现注册功能时使用到了邮箱激活验证,在此总结下. 简介 JavaMail 是提供给开发者处理电子邮件相关的编程接口,它是 SUN 发布的用来处理 email 的 API ,它可以方便地执 ...

  9. 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】

    一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...

最新文章

  1. Delphi Qjson
  2. Math4DS 直播 NO.10 | “机器学习之父”、加州大学伯克利分校迈克尔·乔丹
  3. 【面试笔记系列】排序算法汇总
  4. 遥感影像场景分类预测大赛——算法硬碰硬!
  5. 移动办公、企业-移动办公:移动过程中的办公触手可及-by小雨
  6. Linux Shell处理文本最常用的工具大盘点
  7. 使用DX查看系统配置
  8. 全国大学生电子设计竞赛(七)--逆变电源设计
  9. 银行家算法01--安全性检查 (操作系统)
  10. 提取Excel中的超链接
  11. 字符串数组(String []) 去掉重复值的方法
  12. SAP无法下载excel
  13. 腾讯发布智能硬件全民WiFi 可提高游戏速度
  14. 中文停用词库,不用C币直接复制
  15. php 输入出生年月日计算年纪,PHP实现根据出生年月日计算年龄的功能(代码示例)...
  16. mysql与pg的主键索引说明
  17. 如何快速发表第一篇高水平论文
  18. 原油CFD是什么?国内投资者如何交易原油CFD期货?
  19. 位置度最大实体计算方式
  20. Devops持续化集成

热门文章

  1. Python 类属性和类方法、单例、异常
  2. java字符串变成字母,java字符串的大小写字母转换
  3. 简单教会你如何获取淘宝/天猫店铺的所有商品
  4. fgo服务器维护检测脚本,fgo脚本会封号吗过验证用
  5. 广州有哪些行业可以享受国家政策的补贴?
  6. 丁达尔效应产生的原因_丁达尔效应是什么现象举例说明
  7. php发送邮件,邮件内容包含HTML标签
  8. CString 转 LPCSTR
  9. 了解硅谷历史,向前辈学习,引史为鉴
  10. java快排原理_快速排序原理及实现(java)