使用Spring Boot 開發支持多附件郵件發送微服務平臺

1. 前言

互聯網發展到現在,郵件服務已經成爲互聯網企業中必備功能之一,應用場景非常廣泛,比較常見的有:用戶註冊、忘記密碼、監控提醒、企業營銷等。

大多數互聯網企業都會將郵件發送抽取爲一個獨立的微服務,對外提供REST接口來支持各種類型的郵件發送。

中國的第一封電子郵件

1987 年 9 月 14 日中國第一封電子郵件是由“德國互聯網之父”維納·措恩與王運豐在當時的兵器工業部下屬單位—計算機應用技術研究所(簡稱 ICA)發往德國卡爾斯魯厄大學的,其內容爲德文和英文雙語,第一段大意如下:

原文:“ Across the Great Wall we can reach every corner in the world. ”

中文大意:“ 越過長城,我們可以到達世界的每一個角落。 ”

這是中國通過北京與德國卡爾斯魯厄大學之間的網絡連接,發出的第一封電子郵件。現在看這封郵件內容,頗具深意!

2. 郵件協議

發送郵件的本質是將一個人的信息傳輸給另外一個人,那麼如何傳輸就需要商量好標準,這些標準就是協議。最初只有兩個協議:

· SMTP 協議

SMTP 的全稱是 “Simple Mail Transfer Protocol”,即簡單郵件傳輸協議。它是一組用於從源地址到目的地址傳輸郵件的規範,通過它來控制郵件的中轉方式。它的一個重要特點是它能夠在傳送中接力傳送郵件,即郵件可以通過不同網絡上的主機接力式傳送。

SMTP 認證,簡單地說就是要求必須在提供了賬戶名和密碼之後纔可以登錄 SMTP 服務器,這就使得那些垃圾郵件的散播者無可乘之機。增加 SMTP 認證的目的是爲了使用戶避免受到垃圾郵件的侵擾。SMTP主要負責底層的郵件系統如何將郵件從一臺機器傳至另外一臺機器。

· POP3 協議

POP3 是 Post Office Protocol 3 的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連接到 Internet 的郵件服務器和下載電子郵件的電子協議。

它是因特網電子郵件的第一個離線協議標準,POP3 允許用戶從服務器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務器上的郵件。

POP 協議支持“離線”郵件處理。其具體過程是:郵件發送到服務器上,電子郵件客戶端調用郵件客戶機程序以連接服務器,並下載所有未閱讀的電子郵件。

這種離線訪問模式是一種存儲轉發服務,將郵件從郵件服務器端送到個人終端機器上,一般是 PC 機或 MAC。

一旦郵件發送到 PC 機或 MAC上,郵件服務器上的郵件將會被刪除。但目前的 POP3 郵件服務器大都可以“只下載郵件,服務器端並不刪除”,也就是改進的 POP3 協議。

SMTP 和 POP3 是最初的兩個協議,隨着郵件的不斷髮展後來又增加了兩個協議:

· IMAP 協議

全稱 Internet Mail Access Protocol(交互式郵件存取協議),IMAP 是斯坦福大學在 1986 年開發的研發的一種郵件獲取協議,即交互式郵件存取協議,它是跟 POP3 類似郵件訪問標準協議之一。

不同的是,開啓了 IMAP 後,在電子郵件客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操作都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會做相應的動作。

所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態都是一致的。

IMAP 的一個與 POP3 的區別是:IMAP 它只下載郵件的主題,並不是把所有的郵件內容都下載下來,而是你郵箱當中還保留着郵件的副本,沒有把你原郵箱中的郵件刪除,你用郵件客戶軟件閱讀郵件時才下載郵件的內容。

較好支持這兩種協議的郵件客戶端有:Foxmail、Outlook 等。

· Mime 協議

由於 SMTP 這個協議開始是基於純 ASCⅡ文本的,在二進制文件上處理得並不好。後來開發了用來編碼二進制文件的標準,如 MIME,以使其通過 SMTP 來傳輸。

今天,大多數 SMTP 服務器都支持 8 位 MIME 擴展,它使二進制文件的傳輸變得幾乎和純文本一樣簡單。

用一張圖來看發送郵件過程中的協議使用:

實線代表 [email protected] 發送郵件給 [email protected]

虛線代表 [email protected] 發送郵件給 [email protected]

  • 發信人在用戶代理上編輯郵件,並寫清楚收件人的郵箱地址;

  • 用戶代理根據發信人編輯的信息,生成一封符合郵件格式的郵件;

  • 用戶代理把郵件發送到發信人的郵件服務器上,郵件服務器上面有一個緩衝隊列,發送到郵件服務器上面的郵件都會加入到緩衝隊列中,等待郵件服務器上的 SMTP 客戶端進行發送;

  • 發信人的郵件服務器使用 SMTP 協議把這封郵件發送到收件人的郵件服務器上

  • 收件人的郵件服務器收到郵件後,把這封郵件放到收件人在這個服務器上的信箱中;

  • 收件人使用用戶代理來收取郵件。首先用戶代理使用 POP3 協議來連接收件人所在的郵件服務器,身份驗證成功後,用戶代理就可以把郵件服務器上面的收件人郵箱裏面的郵件讀取出來,並展示給收件人。

這就是郵件發送的一個完整流程。

4. 詳細使用

最早期的時候使用 JavaMail 相關 API 來開發,需要自己去封裝消息體,代碼量比較龐大;

後來 Spring 推出了 JavaMailSender 簡化了郵件發送過程,JavaMailSender 提供了強大的郵件發送功能,可支持各種類型的郵件發送。

現在 Spring Boot 在 JavaMailSender 的基礎上又進行了封裝,就有了現在的 spring-boot-starter-mail,讓郵件發送流程更加簡潔和完善。

下面給大家介紹如何使用 Spring Boot 發送郵件。

4.1 pom 包配置

引入加 spring-boot-starter-mail 依賴包:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>    

4.2 配置文件

在 application.properties 中添加郵箱配置,不同的郵箱參數稍有不同,下面列舉幾個常用郵箱配置:

#spring boot 健康檢查
#啓用郵件運行狀況檢查,
management.health.mail.enabled=false    // true-檢查  false-不檢查

# JavaMailSender 郵件發送的配置
spring.mail.host=smtp.163.com    // 郵件服務地址
[email protected]    // 用戶名
spring.mail.password=xxxxxx        // 密碼
spring.mail.test-connection=false    // 指定是否在啓動時測試郵件服務器連接,默認爲false
spring.mail.properties.mail.smtp.auth=true    
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

# ssl 配置 該配置可選
spring.mail.port=465
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.imap.ssl.socketFactory.fallback=false
spring.mail.properties.mail.smtp.ssl.socketFactory.class=com.fintech.modules.util.MailSSLSocketFactory

注意:測試時需要將 spring.mail.username 和 spring.mail.password 改成自己郵箱對應的登錄名和密碼,這裏的密碼不是郵箱的登錄密碼,是開啓 POP3 之後設置的客戶端授權密碼。

這裏以 126 爲郵件舉例,有兩個地方需要郵箱中設置:

開啓 POP3/SMTP 服務、IMAP/SMTP 服務

640?wx_fmt=png

圖片下方會有 smtp 等相關信息的配置提示。

開通設置客戶端授權密碼

640?wx_fmt=png

設置客戶端授權密碼一般需要手機驗證碼驗證。

一般都是公司郵件進行發送的,這個設置可以不關注。

4.3 支持簡單文本,HTML,多附件發送

代碼地址:https://download.csdn.net/download/lovelichao12/10893487

郵件微服務平臺本人實現代碼地址,採用spring boot 微服務形式實現,註冊中心用的eureka,發送記錄存入ES,如果這兩者不用,請刪除裏面的代碼就可以使用

 

文檔地址:https://download.csdn.net/download/lovelichao12/10893464

 

參考文章地址:https://blog.csdn.net/ityouknow/article/details/82976137

 

 

 

 

 

 

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