用户注册发送邮件激活(下)

 

由于本人实战项目,编码习惯等方面欠缺,本文存在不妥地方,还请大家多多留言。特此声明:此文仅作技术交流与探讨,不允许发垃圾邮件等破坏公共信息安全行为,爱护网络环境,人人有责。

本系统参考的博文有:

  1. 系统分层:https://blog.csdn.net/zdwzzu2006/article/details/6053006
  2. 邮箱服务器,邮件客户端配置:https://blog.csdn.net/qq_41264674/article/details/81303641

案例:用户去注册某网站,输入其邮箱,并去邮箱里激活。

环境搭建

  • 邮箱服务器:eyou邮件服务器(免费)
  • 邮箱客户端:FoxMail
  • 邮箱服务器,邮件客户端配置请参考:配置详情请点击
  • 本文邮箱服务器配置如下:

邮箱注册管理员([email protected]),用户([email protected]

 用户登录

系统分层

  • 此局部系统处理分为3层,Controller,Service,DAO。
  • Controller层:Controller层负责具体的业务模块流程的控制。
  • Service层:Service层主要负责业务模块的逻辑应用设计
  • DAO(Data Access Objects)层:DAO层主要是做数据持久层的工作。

详细设计

用户注册分为以下2步:

  1. 用户添加
  2. 邮件激活

用户添加

  • 用户添加时序图如下

用户添加时序图

注释:

User:用户

MailUtil:发送邮件工具类。

3、封装用户并添加:封装用户(给注册用户设置state,code),并添加至Database。

用户激活(DB:改变用户状态,清除激活码)

  • 时序图如下:

邮件激活时序图

注释:

5、更新用户状态:(user表实际操作state:1,code:null)

编码

创建表

CREATE TABLE `user` (
  `uid` int(11) NOT NULL 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,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;

工具类:

  •  管理员:Admin
package org.badwritten.study.entity;

/**
 * 管理员
 * @author Bad Written
 *
 */
public class Admin {
	
	private static String adminEmail;
	private static String passWord;
	private static String url;

	public static String getAdminEmail() {
		return adminEmail;
	}

	public static void setAdminEmail(String adminEmail) {
		Admin.adminEmail = adminEmail;
	}

	public static String getPassWord() {
		return passWord;
	}

	public static void setPassWord(String passWord) {
		Admin.passWord = passWord;
	}

	public static String getUrl() {
		return url;
	}

	public static void setUrl(String url) {
		Admin.url = url;
	}
	
}

 管理员配置文件

[email protected]
passWord=123
#邮件激活访问路径
url=http://localhost:8080/email/active.do
  • 产生激活码:
package org.badwritten.study.utils;

import java.util.UUID;

/**
 * 生成随机32位字符串工具类
 * @author Bad Written
 *
 */
public class UuidTils {

	public static String getState(){		
		return UUID.randomUUID().toString().replace("-", "");
	}
}
  •  发送邮件工具(MailUtil)

jar包:javax.mail.jar

前提:Admin类随着服务器启动,就被实例化。

package org.badwritten.study.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;

import org.badwritten.study.entity.Admin;

/**
 * 邮件发送的工具类
 * @author Bad Written
 *
 */
public class MailUtils{
	
	/**
	 * Admin类随着服务器启动,就被实例化。
	 * 发送邮件方法
	 * @param to:收件人
	 * @param code:激活码
	 * @throws Exception 
	 */
	public static void sendMail(String to,String code) throws Exception{
		//1、创建连接对象,连接到邮箱服务器
		Properties props=new Properties();
		Session session=Session.getDefaultInstance(props, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				//官方登录的用户名及密码
				return new PasswordAuthentication(Admin.getAdminEmail(),Admin.getPassWord());
			}
		});
		//2、创建邮件对象
		Message message=new MimeMessage(session);
		//2.1、设置发件人
		message.setFrom(new InternetAddress(Admin.getAdminEmail()));
		//2.2、设置收件人
		message.setRecipient(RecipientType.TO, new InternetAddress(to));
		//2.3、设置邮件主题
		message.setSubject("来自火星站邮件激活");
		//2.4、设置邮件正文
		String context="<h1>来自火星站站邮件激活,激活请点击一下链接:</h1>"
				      + "<h3>"
				          + "<a href='"+Admin.getUrl()+"?code="+code+"'>"+Admin.getUrl()+"?code="+code+"</a>"
				       + "</h3>";
		message.setContent(context, "text/html;charset=UTF-8");
		//3、发送一封激活独享
		Transport.send(message);
		
	}
}

测试

注册:

 邮箱激活:点击链接

 

 邮件激活之后:Database 再确认

猜你喜欢

转载自blog.csdn.net/MK456/article/details/84452884