一.软件安装及资源准备

1.下载并安装易邮邮箱服务器和Foxmail邮箱客户端

易邮邮箱服务器下载地址:https://download.csdn.net/download/qq_20788055/10496104

Foxmail邮箱客户端下载地址:https://download.csdn.net/download/qq_20788055/10496096

2.创建邮箱账号(直接点击“新账号”创建)

3.添加邮箱账号至FoxMail客户端

4.所需jar包下载地址:https://download.csdn.net/download/qq_20788055/10495554

二.创建数据库及开发项目

1.创建数据表(regist)

2.开发项目

(1)创建实体类UserVO

public class UserVO {private String uid;private String username;private String password;private String nickname;private String email;private String state;private String code;public String getUid() {return uid;}public void setUid(String uid) {this.uid = uid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getState() {return state;}public void setState(String state) {this.state = state;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}}

(2)创建控制层--RegistServlet

package com.javamail.servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.javamail.service.UserService;
import com.javamail.service.impl.UserServiceImpl;
import com.javamail.utils.UUIDUtil;
import com.javamail.vo.UserVO;/*** Servlet implementation class UserServlet*/
public class RegistServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public RegistServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub//response.getWriter().append("Served at: ").append(request.getContextPath());request.setCharacterEncoding("UTF-8");//获取数据String username=request.getParameter("yourname");String password=request.getParameter("yourpass");String nickname=request.getParameter("nickname");String email=request.getParameter("youremail");//封装数据UserVO user=new UserVO();user.setUid(UUIDUtil.getUUID());user.setUsername(username);user.setNickname(nickname);user.setPassword(password);user.setEmail(email);user.setState("0");//0-未激活  1-已激活user.setCode(UUIDUtil.getUUID()+UUIDUtil.getUUID());//保存数据UserService userService=new UserServiceImpl();userService.regist(user);//页面跳转request.setAttribute("msg", "您已注册成功,请去邮箱激活!");request.getRequestDispatcher("/msg.jsp").forward(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

(3)创建业务层--UserService

package com.javamail.service.impl;import com.javamail.dao.UserDAO;
import com.javamail.dao.impl.UserDAOImpl;
import com.javamail.service.UserService;
import com.javamail.utils.MailUtil;
import com.javamail.vo.UserVO;public class UserServiceImpl implements UserService{@Overridepublic void regist(UserVO user) {//将数据存入数据库UserDAO userDAO=new UserDAOImpl();userDAO.regist(user);//发送激活邮件MailUtil.sendMail(user.getEmail(), user.getCode());}@Overridepublic UserVO findUserByCode(String code) {UserDAO userDAO=new UserDAOImpl();return userDAO.findUserByCode(code);}@Overridepublic void updateUser(UserVO user) {UserDAO userDAO=new UserDAOImpl();userDAO.updateUser(user);}}

(4)编写持久层--UserDAO

其中用到LZ自己封装的JDBC工具类,源码地址:https://github.com/Jasper2s/Study_Imooc/tree/master/JavaMail/src/com/javamail/utils

package com.javamail.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;import com.javamail.dao.UserDAO;
import com.javamail.utils.JDBCUtil;
import com.javamail.vo.UserVO;public class UserDAOImpl implements UserDAO{@Overridepublic void regist(UserVO user) {Connection conn=null;PreparedStatement st=null;ResultSet rs=null;JDBCUtil jdbcUtil=JDBCUtil.getInstance();try {conn=jdbcUtil.getConnection();String sql="insert into regist values(?,?,?,?,?,?,?)";st=conn.prepareStatement(sql);st.setString(1, user.getUid());st.setString(2, user.getUsername());st.setString(3, user.getPassword());st.setString(4, user.getNickname());st.setString(5, user.getEmail());st.setString(6, user.getState());st.setString(7, user.getCode());st.execute();} catch (Exception e) {e.printStackTrace();} finally{jdbcUtil.close(rs, st, conn);}}@SuppressWarnings("null")@Overridepublic UserVO findUserByCode(String code) {Connection conn=null;PreparedStatement st=null;ResultSet rs=null;UserVO user=new UserVO();JDBCUtil jdbcUtil=JDBCUtil.getInstance();try {conn=jdbcUtil.getConnection();String sql="select * from regist where code=?";st=conn.prepareStatement(sql);st.setString(1, code);rs=st.executeQuery();while(rs!=null&&rs.next()){String uid=rs.getString("uid");String username=rs.getString("username");String nickname=rs.getString("nickname");String email=rs.getString("email");String state=rs.getString("state");user.setUid(uid);user.setUsername(username);user.setNickname(nickname);user.setEmail(email);user.setState(state);}} catch (Exception e) {e.printStackTrace();}finally{jdbcUtil.close(rs, st, conn);}return user;}@Overridepublic void updateUser(UserVO user) {Connection conn=null;PreparedStatement st=null;ResultSet rs=null;JDBCUtil jdbcUtil=JDBCUtil.getInstance();try {conn=jdbcUtil.getConnection();String sql="update regist set username=?,password=?,nickname=?,email=?,state=?,code=? where uid=?";st=conn.prepareStatement(sql);st.setString(1, user.getUsername());st.setString(2, user.getPassword());st.setString(3, user.getNickname());st.setString(4, user.getEmail());st.setString(5, user.getState());st.setString(6, user.getCode());st.setString(7, user.getUid());st.execute();} catch (Exception e) {e.printStackTrace();} finally{jdbcUtil.close(rs, st, conn);}}}

(5)编写邮箱发送的工具类--MailUtil

发送激活邮件的一般步骤:创建连接对象连接到邮箱服务器-->创建邮件对象(设置发件人,收件人,主题,正文)-->发送邮件

package com.javamail.utils;import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;/*** 邮件发送工具类* @author qiuzhiwen**/
public class MailUtil {public static void sendMail(String to,String code){Properties props=new Properties();//props.setProperty("host", "");//1.创建连接对象,连接到邮箱服务器Session session=Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("service@qzw.com", "123");}});//2.创建邮件对象Message message=new MimeMessage(session);try {//设置发件人message.setFrom(new InternetAddress("service@qzw.com"));//设置收件人message.setRecipient(RecipientType.TO, new InternetAddress(to));//设置邮件的主题message.setSubject("来自XXX网站的激活邮件");//设置邮件的正文message.setContent("<h1>来自XXX网站的激活邮件,激活请点击以下链接:</h1><br/><h3><a href='http://localhost:8080/JavaMail/ActiveServlet?code="+code+"'>http://localhost:8080/JavaMail/ActiveServlet?code="+code+"</a></h3>", "text/html;charset=UTF-8");//3.发送激活邮件Transport.send(message);} catch (Exception e) {e.printStackTrace();} }}

(6)注册页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>用户注册页面</title>
<style type="text/css">body{font:14px/28px "微软雅黑";}.contact *:focus{outline :none;}.contact{width: 700px;height: auto;background: #f6f6f6;margin: 40px auto;padding: 10px;}.contact ul {width: 650px;margin: 0 auto;}.contact ul li{border-bottom: 1px solid #dfdfdf;list-style: none;padding: 12px;}.contact ul li label {width: 120px;display: inline-block;float: left;}.contact ul li input[type=text],.contact ul li input[type=password]{width: 220px;height: 25px;border :1px solid #aaa;padding: 3px 8px;border-radius: 5px;}.contact ul li input:focus{border-color: #c00;}.contact ul li input[type=text]{transition: padding .25s;-o-transition: padding  .25s;-moz-transition: padding  .25s;-webkit-transition: padding  .25s;}.contact ul li input[type=password]{transition: padding  .25s;-o-transition: padding  .25s;-moz-transition: padding  .25s;-webkit-transition: padding  .25s;}.contact ul li input:focus{padding-right: 70px;}.btn{position: relative;left: 300px;}.tips{color: rgba(0, 0, 0, 0.5);padding-left: 10px;}.tips_true,.tips_false{padding-left: 10px;}.tips_true{color: green;}.tips_false{color: red;}</style>
</head>
<body><script type="text/javascript">//验证用户名function checkna(){na=form1.yourname.value;if( na.length <1 || na.length>12)  {   divname.innerHTML='<font class="tips_false">长度是1~12个字符</font>';}else{  divname.innerHTML='<font class="tips_true">输入正确</font>';}  }//验证用户名function checknickname(){na=form1.nickname.value;if( na.length <1 || na.length>12)  {      divname.innerHTML='<font class="tips_false">长度是1~12个字符</font>';}else{  divname.innerHTML='<font class="tips_true">输入正确</font>';}  }//验证密码 function checkpsd1(){    psd1=form1.yourpass.value;  var flagZM=false ;var flagSZ=false ; var flagQT=false ;if(psd1.length<6 || psd1.length>12){   divpassword1.innerHTML='<font class="tips_false">长度错误</font>';}else{   for(i=0;i < psd1.length;i++)   {    if((psd1.charAt(i) >= 'A' && psd1.charAt(i)<='Z') || (psd1.charAt(i)>='a' && psd1.charAt(i)<='z')) {   flagZM=true;}else if(psd1.charAt(i)>='0' && psd1.charAt(i)<='9')    { flagSZ=true;}else    { flagQT=true;}   }   if(!flagZM||!flagSZ||flagQT){divpassword1.innerHTML='<font class="tips_false">密码必须是字母数字的组合</font>'; }else{divpassword1.innerHTML='<font class="tips_true">输入正确</font>';}  }    }//验证确认密码 function checkpsd2(){ if(form1.yourpass.value!=form1.yourpass2.value) { divpassword2.innerHTML='<font class="tips_false">您两次输入的密码不一样</font>';} else { divpassword2.innerHTML='<font class="tips_true">输入正确</font>';}}//验证邮箱function checkmail(){apos=form1.youremail.value.indexOf("@");dotpos=form1.youremail.value.lastIndexOf(".");if (apos<1||dotpos-apos<2) {divmail.innerHTML='<font class="tips_false">输入错误</font>' ;}else {divmail.innerHTML='<font class="tips_true">输入正确</font>' ;}}</script><div class="contact" ><form name="form1" method="post" action="${pageContext.request.contextPath }/RegistServlet"><ul><li><label>姓名:</label><input type="text" name="yourname" placeholder="请输入用户名"  οnblur="checkna()" required/><span class="tips" id="divname">长度1~12个字符</span></li><li><label>密码:</label><input type="password" name="yourpass" placeholder="请输入你的密码" onBlur="checkpsd1()" required/><span class="tips" id="divpassword1">密码必须由字母和数字组成</span></li><li><label>确认密码:</label><input type="password" name="yourpass2" placeholder="请再次输入你的密码" onBlur="checkpsd2()" required/><span class="tips" id="divpassword2">两次密码需要相同</span></li><li><label>昵称:</label><input type="text" name="nickname" placeholder="请输入昵称"  οnblur="checknickname()" required/><span class="tips" id="divname">长度1~12个字符</span></li><li><label>电子邮箱:</label><input type="text" name="youremail" placeholder="请输入你的邮箱" onBlur="checkmail()" required/><span class="tips" id="divmail"></span></li></ul><b class="btn"><input type="submit" value="提交"/><input type="reset" value="取消"/></b></form></div>
</body>
</body>
</html>

三.启动项目

浏览器访问http://localhost:8080/JavaMail/regist.jsp

输入信息进行提交

查看邮箱,点击“收取”可以看到一封新邮件:

查看数据库(state为0,表示未激活)

然后点击激活链接地址

再查看数据库(state为1,表示已激活)

附:

源码地址https://github.com/Jasper2s/Study_Imooc/tree/master/JavaMail

JavaMail实现邮箱激活功能相关推荐

  1. php实现邮箱激活功能

    php实现邮箱激活功能 一.样例 二.文件结构 其中swiftmailer-master是第三方插件,用来发验证邮件 三.核心代码 doAction.php 响应页面 1 <?php 2 hea ...

  2. 黑马旅游网编写练习(2)--邮箱激活功能

    黑马旅游网编写练习(2)–邮箱激活功能 当用户进行注册时,一般会需要使用邮箱进行激活:所以在这里也模拟一下注册后邮箱的激活功能. 首先导入发送邮箱的jar包mail.jar:或者配置maven地址为: ...

  3. javamail实现邮箱验证功能

    javamail是基于SMTP协议和POP3协议的邮件发送与接收系统,在用户注册与登陆的过程中,常需要用到邮箱验证功能,下面是基于javamail的一个简单实现 用户注册后通过servlet得到邮箱地 ...

  4. idea实现注册登录时使用QQ邮箱激活功能

    首先建立数据库,我的数据库为: CREATE TABLE user (uid varchar(11) primary key , -- 账号type int default 1, -- 类型, 1注册 ...

  5. 邮箱激活功能,前台用户注册后需要登录邮箱激活账号才能够登录的,请简述激活过程,重点是安全性

    在提交了注册信息后,同时在数据库中写入激活码,同时程序把激活码(链接)发送到注册者的信箱里,注册者点击激活链接后,程序会和数据库里的数据进行对比,对比通过即完成激活.           每次有新用户 ...

  6. asp.net mvc 注册中的邮箱激活功能实现(二)

    邮件发送功能封装 /// <summary>         /// 发送注册邮件         /// </summary>         /// <param n ...

  7. Java实现注册邮箱激活验证

    最近从项目分离出来的注册邮箱激活功能,整理一下,方便下次使用 RegisterValidateService.java package com.app.service.impl;import java ...

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

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

  9. Java案例-用户注册邮箱验证将邮箱激活码存入redis功能实现

    <–start–> 用户注册时,要求用户填写注册邮箱,然后后台向用户的注册邮箱中发送绑定邮件,并将激活码保存到redis中. 手机短信验证码因为时效期短,只需要将短信验证码存储到sessi ...

最新文章

  1. 中国电子学会青少年编程能力等级测试图形化四级编程题:抽奖
  2. Java基础-OOP特性之封装、继承、多态、抽象
  3. docker ubuntu镜像_Docker 入门指南 | Linux 中国
  4. 学C++,80%都是为了搞竞赛、凑一门语言?网友:莫钓鱼
  5. Linux 需要的常用操作,你只差这篇文章
  6. js如何判断一个对象是不是Array
  7. 重装上阵怎么造简便机器人_重装上阵怎么造厉害的机器人?新人必看的干货组装教学[多图]...
  8. 三星鸿蒙手机,被忽视的对手:三星的自研系统,已全球第一,成华为鸿蒙对手...
  9. CSS 清理浮动 clear属性
  10. 毕业一周年,工作一周年零七天
  11. java sybase存储过程_sybase存储过程-----不定时更新
  12. Adobe正式在中国市场推出Creative Cloud创意应用软件
  13. 阿里无线11.11:手机淘宝移动端接入网关基础架构演进之路
  14. Linux与Windows编译器的区别
  15. H264---帧/场编码模式选择---PAFF MBAFF frame_mbs_only_flag mb_adaptive_frame_field_flag field_pic_flag
  16. 冉宝的每日一题--8月11日
  17. 集合下现在淘宝小号所遇见的常见问题
  18. 笔记本的结构深入分析
  19. 网站的权重怎么计算以及网站降权的分析处理方法
  20. 截止到20190828的前沿汇总

热门文章

  1. UiPath识别教程
  2. 制作目录完好无广告内容的电子书
  3. 整数边界对齐方式_c中结构体边界对齐(转)
  4. pyecharts+Vue在显示图表
  5. 【目标检测】MMDetection专栏之MMDetection安装|一
  6. 【TV】三星曲面电视技术解析
  7. OpenCV系列之级联分类器 | 六十一
  8. FishNet网络搭建代码阅读(2)——fishnet.py
  9. 最新Word及Excel操作技巧
  10. mac上获取当前文件路径