首先叹放,現(xiàn)在spring boot簡直就是 一個大雜燴。如果需要什么功能或者插件建議大家先在spring家族找找。指不定人家已經(jīng)給你集成了甘穿。
java發(fā)送郵件,一般作為注冊驗證或者系統(tǒng)通知什么的梢杭。
在此以spring boot為例(畢竟近兩年boot已經(jīng)成為了java代碼的基石了温兼,不用的應該很少吧)
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 = "郵箱的密碼";
//這里方法的返回值是我自己封裝的對象咒唆。因為習慣性這么返回給前端了届垫。具體你們用要結(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郵箱對應設(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ù)需求项戴,千萬別直接復制粘貼就用了形帮。
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)的注冊申請,為確認賬戶的真實性,須完成賬戶驗證峭判。本次驗證碼為 <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ù)訪問,應該會有問題熟掂。因為email參數(shù)可能會在識別上出問題缎浇。反正我本人這么訪問的時候一直是發(fā)送錯誤,不是說address錯誤(加上‘’傳過來的參數(shù)上也有赴肚,所以郵箱錯誤)就是說域名錯誤(因為郵箱地址是.com結(jié)尾)素跺。但是代碼里調(diào)用方法或者postman都沒問題的。前后端交互更沒問題了尊蚁。
然后就沒啥需要注意的了。雖然這個使用方法比較簡單侣夷,但是畢竟是個小技巧横朋。對于沒做過的人來說完全可以cv然后小改動一下直接使用~