結合Spring發送郵件的四種正確姿勢,你知道幾種?
一 前言
測試所使用的環境
測試使用的環境是企業主流的SSM 框架即 SpringMVC+Spring+Mybatis。為了節省時間,我直接使用的是我上次的「SSM項目中整合Echarts開發」該項目已經搭建完成的SSM環境。
標題說的四種姿勢指的是哪四種姿勢?
發送text格式的郵件
發送HTML格式的郵件
基於FreeMarker模板引擎發送郵件
基於Velocity模板引擎發送郵件
如何獲取以及運行我的Demo
Github地址:https://github.com/Snailclimb/J2ee-Advanced。(說明:相關代碼都在ssm-echarts-demo 項目中)
你可以選擇直接下載或者直接在DOS窗口運行: 命令,這樣項目就被拷貝到你的電腦了。
然後選擇導入Maven項目即可(不懂Maven的可以自行百度學習).
二 準備工作
既然要發送郵件,那麼你首先要提供一個能在第三方軟體上發送郵件功能的賬號。在這裡,我選擇的網易郵箱賬號。
我拿網易郵箱賬號舉例子,那麼我們如何才能讓你的郵箱賬號可以利用第三方發送郵件(這裡的第三方就是我們即將編寫的程序)。
大家應該清楚:客戶端和後台交互數據的時候用到了Http協議,那麼相應的,郵箱傳輸也有自己的一套協議,如SMTP,POP3,IMAP。
開啟POP3/SMTP/IMAP服務
所以,我們第一步首先要去開啟這些服務,如下圖所示:
如果你未開啟該服務的話,運行程序會報如下錯誤(配置文件中配置的密碼是你的授權碼而不是你登錄郵箱的密碼,授權碼是你第三方登錄的憑證):
JavaMail介紹
我們需要用到的發郵件的核心jar包,所以這裡好好介紹一下。
JavaMail是由Sun定義的一套收發電子郵件的API,不同的廠商可以提供自己的實現類。但它並沒有包含在JDK中,而是作為JavaEE的一部分。廠商所提供的JavaMail服務程序可以有選擇地實現某些郵件協議,常見的郵件協議包括:
SMTP:簡單郵件傳輸協議,用於發送電子郵件的傳輸協議;
POP3:用於接收電子郵件的標準協議;
IMAP:互聯網消息協議,是POP3的替代協議。
這三種協議都有對應SSL加密傳輸的協議,分別是SMTPS,POP3S和IMAPS。
我們如果要使用JavaMail的話,需要自己引用相應的jar包,如下圖所示:
相關配置文件
下圖是除了pom.xml之外用到的其他所有配置文件
pom.xml
需要用到的jar包。
mail.properties
如果你的授權碼填寫錯誤的話,會報如下錯誤:
velocity.properties
applicationContext-email.xml
三 開始編寫工具類
我這裡說是工具類,其實只是我自己做了簡單的封裝,實際項目使用的話,可能會需要根據需要簡單修改一下。
所有用到的類如下圖所示:
發送Text或者HTML格式的郵件的方法
我在 方法中添加了一個 類型的變數type作為標誌,如果為ture就表示發送html格式的郵件否則直接發送text格式的郵件。實現起來很簡單,我們通過下面的判斷語句就可以實現了
效果:
基於FreeMarker模板引擎發送郵件
下圖是我們用到的FreeMarker模板文件以及Velocity模板文件的位置。
我們通過 方法讀取freemarker模板,返回的格式如下圖所示:
其實就是HTML,然後我們就可以像前面發送HTML格式郵件的方式發送這端消息了。
email.ftl
效果:
不知道為啥,騰訊每次把我使用模板引擎發的郵件直接放到垃圾箱。大家如果遇到接收不到郵件,但是又沒報錯的情況,可以看看是不是到了自己郵箱的垃圾箱。
基於Velocity模板引擎發送郵件
email.vm
效果:
controller層
四 總結
上面我們總結了Spring發送郵件的四種正確姿勢,並且將核心代碼提供給了大家。代碼中有我很詳細的注釋,所以我對於代碼以及相關類的講解很少,感興趣的同學可以自行學習。最後,本項目Github地址:https://github.com/Snailclimb/J2ee-Advanced。
備註:實踐過程中如果遇到自己無法解決的問題可以添加我的微信。
五 推薦一個自己的開源的後端文檔
Java-Guide: Java面試通關手冊(Java學習指南)。(star:1.8k)
Github地址:https://github.com/Snailclimb/Java-Guide
文檔定位:一個專門為Java後端工程師準備的開源文檔,相信不論你是Java新手還是已經成為一名Java工程師都能從這份文檔中收穫到一些東西。
TAG:編程指南針 |