- 我們平時都會想到發一封郵件的需求,無論是工作需要,還是朋友間溝通,那麼怎麼能用java發一封郵件呢,我們先從郵件的協議說起
郵件的協議
- SMTP(Simple Mal Translate Protocol)
它是客戶端向郵箱服務器發送郵件的協議 - POP3(Post Office Protocl 3)
它是客戶端從服務器獲取郵件的協議 - IMAP(Internet Mail Access Protocl)
與POP3一樣,也是獲取郵件的協議,它是POP3的增強版
郵件的流轉
比如你想用QQ郵箱給139郵箱發一封郵件
- 1.首先你需要發送郵件到QQ郵箱服務器
- 2.QQ郵箱服務器收到郵件後會發給139郵箱服務器
- 3.最後你在139郵箱上讀取郵件內容
那麼你在這個過程中,都使用了什麼協議?
- 1.首先你需要發送郵件到QQ郵箱服務器(這個過程使用的是POP3協議或IMAP協議)
- 2.QQ郵箱服務器收到郵件後會發給139郵箱服務器(同樣這個過程,也使用的是POP3協議或IMAP協議)
- 3.最後你在139郵箱上讀取郵件內容(這個過程使用的是SMTP協議)
郵件開啓POP3/STMP、IMAP/STMP
以139郵箱爲例,首先點擊“賬戶信息”,找到“郵箱協議設置”,然後"開啓POP3/STMP服務"選項打勾
- 這樣根據郵箱的賬號密碼,就可以用java代碼往郵箱上發郵件了,下面進入代碼編寫
代碼編寫
Spring Boot 簡化了發送郵件的配置,下面以 Spring Boot 來發送郵件,IDEA IntelliJ 來創建 Spring boot 項目,選了兩個依賴:Spring Web 和 Java Mail Sender,Spring Web 就不說了,就是一個 JavaWeb 項目的依賴,Java Mail Sender 是 Spring Boot 提供的郵件發送工具
創建後在 application.properties 中添加如下內容
spring.mail.host=smtp.139.com
spring.mail.port=25
[email protected]
spring.mail.password=Xuanjin01
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.stmp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
解釋下 application.properties配置內容的含義
- spring.mail.host=smtp.139.com 139郵箱的服務地址
- spring.mail.port=25 不帶SSL的端口
- [email protected] 郵箱的真實賬號
- spring.mail.password=Xuanjin01 郵箱的真實密碼(如果是 QQ 郵箱是一串加密串)
- spring.mail.default-encoding=UTF-8 郵件內容的編碼
- spring.mail.properties.mail.stmp.socketFactory.class=javax.net.ssl.SSLSocketFactory 這個類是Socket用的,大概是指定SSL的Socket工廠類
- spring.mail.properties.mail.debug=true 在控制檯打印郵件的發送過程
可能有些人要問,郵箱服務器地址和端口哪裏來的,其實每個郵箱都有說明,以 139 郵箱爲例,在上面第二張圖上的箭頭指向的“需要幫助?”裏,就有說明,我先截下圖:
好了,由於發送郵件代碼比較簡單,就直接在test裏編碼了
@SpringBootTest
class MailApplicationTests {
@Autowired
JavaMailSender javaMailSender;//配置好後,Spring Boot自動生成的郵件發送對象
@Test
void contextLoads() {
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom("[email protected]");//發件人
msg.setSentDate(new Date());//發送日期
msg.setSubject("這是測試主題");//發送主題
msg.setText("這是測試內容");//發送內容
msg.setTo("[email protected]");//收件人
javaMailSender.send(msg);//發送
}
- 由於我其他郵箱開頭不了 POP3/STMP 協議(主要是其他郵箱要手機號驗證,我換號了),就自己給自己的 139 郵箱發郵件吧,我們看到只需要短短7行代碼就可以了,執行@Test測試方法,控制檯可以看見郵件的發送過程
查看139郵箱
- 看見了剛纔發送的郵件
- 打開
好了,第一封簡單的郵件發送就先寫到這裏,下一篇,我將介紹如何發送有附件的郵件和郵件內容就有圖片的郵件,敬請期待!Spring Boot發送郵件二——帶附件和內容有圖片的郵件