java發(fā)送郵件驗證碼

首先,現(xiàn)在spring boot簡直就是 一個大雜燴。如果需要什么功能或者插件建議大家先在spring家族找找。指不定人家已經(jīng)給你集成了。

java發(fā)送郵件,一般作為注冊驗證或者系統(tǒng)通知什么的。

在此以spring boot為例(畢竟近兩年boot已經(jīng)成為了java代碼的基石了,不用的應(yīng)該很少吧)

1,添加依賴

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-mail</artifactId>

</dependency>

2,寫一個工具類

在這里有好多種做法,我的是最簡單的都是直接量,如果業(yè)務(wù)需求或者特別需要也可以用配置文件的方式

public class MailUtil {

protected static final Logger LOG = LoggerFactory.getLogger(MailUtil.class);

private final static String NAME = "你的發(fā)送郵件的郵箱";

private final static String PASSWORD = "郵箱的密碼";

//這里方法的返回值是我自己封裝的對象。因為習(xí)慣性這么返回給前端了。具體你們用要結(jié)合實際

//參數(shù)是你要發(fā)送給的郵箱,一般都是前臺傳的。

public ResultBean sendEmail(String email) {

// 創(chuàng)建連接對象 連接到郵件服務(wù)器

Properties properties = new Properties();

// 設(shè)置發(fā)送郵件的基本參數(shù)

// 發(fā)送郵件服務(wù)器(注意,此處根據(jù)你的服務(wù)器來決定,我這里使用的是QQ服務(wù)器,所以是smtp.qq.com)

properties.put("mail.smtp.host", "smtp.qq.com");

// 發(fā)送端口(根據(jù)實際情況填寫,一般均為25)

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

properties.put("mail.smtp.auth", "true");

// 設(shè)置發(fā)送郵件的賬號和密碼

Session session = Session.getInstance(properties, new Authenticator() {

@Override

protected PasswordAuthentication getPasswordAuthentication() {

// 兩個參數(shù)分別是發(fā)送郵件的賬戶和密碼(注意,如果配置后不生效,請檢測是否開啟了 POP3/SMTP 服務(wù),QQ郵箱對應(yīng)設(shè)置位置在:

// [設(shè)置-賬戶-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)])

return new PasswordAuthentication(NAME, PASSWORD);

}

});

// 創(chuàng)建郵件對象

Message message = new MimeMessage(session);

try {

// 設(shè)置發(fā)件人

message.setFrom(new InternetAddress(NAME));

// 設(shè)置收件人

message.setRecipient(Message.RecipientType.TO,new InternetAddress(email));

// 設(shè)置主題,在這里要根據(jù)業(yè)務(wù)需求,千萬別直接復(fù)制粘貼就用了。

message.setSubject("帳號注冊驗證");

// 設(shè)置郵件正文 ,因為要生成驗證碼,所以在此插入正文中

//我這里是采用六位數(shù)隨機數(shù)字。五位后面*10000,四位*1000。。。

int volid = (int)((Math.random()*9+1)*100000);

//因為為了簡單,所以內(nèi)容做的比較簡單,直接就是字符串了。如果內(nèi)容比較多還是建議讀取配置文件吧

String content = "系統(tǒng)收到此郵箱帳號在城市家園網(wǎng)的注冊申請,為確認(rèn)賬戶的真實性,須完成賬戶驗證。本次驗證碼為 <b>"+volid+"</b>,有效時間30分鐘。如果不是本賬戶持有人操作,請忽略!";

message.setContent(content, "text/html;charset=UTF-8");

// 發(fā)送郵件

Transport.send(message);

return Tools.result(200, "郵件發(fā)送成功", volid, true);

} catch (Exception e) {

LOG.info("Error Message: " + e.getMessage());

return Tools.result(500, "郵件發(fā)送失敗", null, false);

}

}

到此工具類完成,然后說幾點需要注意的:

1,我這邊沒有做30分鐘超時設(shè)置,因為我們這次demo是驗證碼返回前端,前端直接和用戶輸入的做比對。所以超時也是直接前端控制了。嗯嗯嗯~~你可以理解為我就是懶。

2,在測試的時候如果直接本地用localhost:端口+路徑+參數(shù)訪問,應(yīng)該會有問題。因為email參數(shù)可能會在識別上出問題。反正我本人這么訪問的時候一直是發(fā)送錯誤,不是說address錯誤(加上‘’傳過來的參數(shù)上也有,所以郵箱錯誤)就是說域名錯誤(因為郵箱地址是.com結(jié)尾)。但是代碼里調(diào)用方法或者postman都沒問題的。前后端交互更沒問題了。

然后就沒啥需要注意的了。雖然這個使用方法比較簡單,但是畢竟是個小技巧。對于沒做過的人來說完全可以cv然后小改動一下直接使用~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容