天天看點

springboot--郵件服務

springboot仍然在狂速發展,才五個多月沒有關注,現在看官網已經到1.5.3.RELEASE版本了。準備慢慢在寫寫springboot相關的文章,本篇文章使用springboot最新版本1.5.3進行開發。

發送郵件應該是網站的必備功能之一,什麼注冊驗證,忘記密碼或者是給使用者發送營銷資訊。最早期的時候我們會使用JavaMail相關api來寫發送郵件的相關代碼,後來spring退出了JavaMailSender更加簡化了郵件發送的過程,在之後springboot對此進行了封裝就有了現在的spring-boot-starter-mail,本章文章的介紹主要來自于此包。

簡單使用

1、pom包配置

pom包裡面添加spring-boot-starter-mail包引用

2、在application.properties中添加郵箱配置

3、編寫mailService,這裡隻提出實作類。

4、編寫test類進行測試

至此一個簡單的文本發送就完成了。

加點料

但是在正常使用的過程中,我們通常在郵件中加入圖檔或者附件來豐富郵件的内容,下面講介紹如何使用springboot來發送豐富的郵件。

發送html格式郵件

其它都不變在MailService添加sendHtmlMail方法.

在測試類中建構html内容,測試發送

發送帶附件的郵件

在MailService添加sendAttachmentsMail方法.

添加多個附件可以使用多條 helper.addAttachment(fileName,file)

在測試類中添加測試方法

發送帶靜态資源的郵件

郵件中的靜态資源一般就是指圖檔,在MailService添加sendAttachmentsMail方法.

添加多個圖檔可以使用多條 和 helper.addInline(rscId,res)來實作

到此所有的郵件發送服務已經完成了。

郵件系統

上面發送郵件的基礎服務就這些了,但是如果我們要做成一個郵件系統的話還需要考慮以下幾個問題:

郵件模闆

我們會經常收到這樣的郵件:

其中隻有neo這個使用者名在變化,其它郵件内容均不變,如果每次發送郵件都需要手動拼接的話會不夠優雅,并且每次模闆的修改都需要改動代碼的話也很不友善,是以對于這類郵件需求,都建議做成郵件模闆來處理。模闆的本質很簡單,就是在模闆中替換變化的參數,轉換為html字元串即可,這裡以 thymeleaf為例來示範。

1、pom中導入thymeleaf的包

2、在resorces/templates下建立emailTemplate.html

3、解析模闆并發送

發送失敗

因為各種原因,總會有郵件發送失敗的情況,比如:郵件發送過于頻繁、網絡異常等。在出現這種情況的時候,我們一般會考慮重新重試發送郵件,會分為以下幾個步驟來實作:

1、接收到發送郵件請求,首先記錄請求并且入庫。

2、調用郵件發送接口發送郵件,并且将發送結果記錄入庫。

3、啟動定時系統掃描時間段内,未發送成功并且重試次數小于3次的郵件,進行再次發送

異步發送

很多時候郵件發送并不是我們主業務必須關注的結果,比如通知類、提醒類的業務可以允許延時或者失敗。這個時候可以采用異步的方式來發送郵件,加快主交易執行速度,在實際項目中可以采用MQ發送郵件相關參數,監聽到消息隊列之後啟動發送郵件。