使用者註冊傳送郵件啟用(下)
阿新 • • 發佈:2018-11-25
由於本人實戰專案,編碼習慣等方面欠缺,本文存在不妥地方,還請大家多多留言。特此宣告:此文僅作技術交流與探討,不允許發垃圾郵件等破壞公共資訊保安行為,愛護網路環境,人人有責。
本系統參考的博文有:
- 系統分層:https://blog.csdn.net/zdwzzu2006/article/details/6053006
- 郵箱伺服器,郵件客戶端配置: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步:
- 使用者新增
- 郵件啟用
使用者新增
- 使用者新增時序圖如下
註釋:
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 再確認