1. 程式人生 > >使用者註冊傳送郵件啟用(下)

使用者註冊傳送郵件啟用(下)

 

由於本人實戰專案,編碼習慣等方面欠缺,本文存在不妥地方,還請大家多多留言。特此宣告:此文僅作技術交流與探討,不允許發垃圾郵件等破壞公共資訊保安行為,愛護網路環境,人人有責。

本系統參考的博文有:

  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 再確認