當前位置:
首頁 > 最新 > SpringBoot中發送QQ郵件

SpringBoot中發送QQ郵件

本文是vhr系列的第十二篇,項目地址https://github.com/lenve/vhr

郵件發送也是一個老生常談的問題了,代碼雖然簡單,但是許多小夥伴對過程不太理解,所以還是打算和各位小夥伴聊聊這個話題。

郵件協議

我們經常會聽到各種各樣的郵件協議,比如SMTP、POP3、IMAP,那麼這些協議有什麼作用,有什麼區別?我們先來討論一下這個問題。

SMTP是一個基於TCP/IP的應用層協議,江湖地位有點類似於HTTP,SMTP伺服器默認監聽的埠號為25。看到這裡,小夥伴們可能會想到既然SMTP協議是基於TCP/IP的應用層協議,那麼我是不是也可以通過Socket發送一封郵件呢?回答是肯定的。

生活中我們投遞一封郵件要經過如下幾個步驟:

1.深圳的小王先將郵件投遞到深圳的郵局

2.深圳的郵局將郵件運送到上海的郵局

3.上海的小張來郵局取郵件

郵件投遞大致就是這個過程,這個過程就涉及到了多個協議,我們來分別看一下。

SMTP協議全稱為Simple Mail Transfer Protocol,譯作簡單郵件傳輸協議,它定義了郵件客戶端軟體於SMTP伺服器之間,以及SMTP伺服器與SMTP伺服器之間的通信規則。也就是說aaa@qq.com用戶先將郵件投遞到騰訊的SMTP伺服器這個過程就使用了SMTP協議,然後騰訊的SMTP伺服器將郵件投遞到網易的SMTP伺服器這個過程也依然使用了SMTP協議,SMTP伺服器就是用來收郵件。而POP3協議全稱為Post Office Protocol,譯作郵局協議,它定義了郵件客戶端與POP3伺服器之間的通信規則,那麼該協議在什麼場景下會用到呢?當郵件到達網易的SMTP伺服器之後,111@163.com用戶需要登錄伺服器查看郵件,這個時候就該協議就用上了:郵件服務商都會為每一個用戶提供專門的郵件存儲空間,SMTP伺服器收到郵件之後,就將郵件保存到相應用戶的郵件存儲空間中,如果用戶要讀取郵件,就需要通過郵件服務商的POP3郵件伺服器來完成。最後,可能也有小夥伴們聽說過IMAP協議,這個協議是對POP3協議的擴展,功能更強,作用類似,這裡不再贅述。

發送QQ郵件準備工作

然後點擊賬戶選項卡:

在賬戶選項卡中找到開啟POP3/SMTP選項,如下:

點擊開啟,開啟相關功能,開啟過程需要手機號碼驗證,按照步驟操作即可,不贅述。開啟成功之後,即可獲取一個授權碼,將該號碼保存好,一會使用。

然後我們需要JavaxMail這個jar包,小夥伴可以直接去Maven中央倉庫下載,這裡不再贅述。

發送

簡單郵件

如果我們只發送一個簡單的文本,發送方式就比較簡單,整個過程可以分為三步如下:

第一步:構造SMTP郵件伺服器的基本環境

第二步:構造郵件

第三步:發送郵件

複雜郵件

發送複雜郵件,第一步和第三步也是一樣的,只有第二步構造郵件的過程比較麻煩,那麼接下來給小夥伴們演示一個發送一封圖文+兩個附件的郵件。要發送複雜郵件,得先熟悉三個概念,如下:

1.MimeMessage:該類是個能理解MIME類型和頭的電子郵件消息

2.MimeMultipart:該類定義了增加、刪除以及獲取郵件不同部分內容的方法

3.MimeBodyPart:該對象代表一個MimeMessage對象內容的一部分。每個MimeBodyPart被認為有兩部分:MIME類型和匹配這個類型的內容

完整的郵件生成過程如下(第一步和第三步參考上文):

OK,Java Mail發送QQ郵件就是這麼簡單,至於其他的如163,sina等,寫法類似,這裡我就不贅述了。

小夥伴可能也注意到了,複雜郵件的構造其實有點麻煩,在項目中,我們可以使用Freemarker來構建郵件模板,這個模板問題我們下篇文章介紹。

關注公眾號,可以及時接收到最新文章:


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 玩轉JavaEE 的精彩文章:

許可權管理模塊中動態載入Vue組件

TAG:玩轉JavaEE |