Spring Boot發送郵件一——最簡單的郵件

  • 我們平時都會想到發一封郵件的需求,無論是工作需要,還是朋友間溝通,那麼怎麼能用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郵箱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章