提到傳送郵件相信大家都不陌生,那麼作為一個程式猿,除了日常的工作要使用郵件之外,可能還有一個專屬於程式猿的使用郵件場景-郵件系統開發,我們不僅僅使用郵件,還開發郵件。
大家應該經常會有這種經歷,當我們在一些平臺使用郵箱註冊賬號或者在繫結郵箱的的時候,通常都會有一個郵箱驗證啟用的步驟。這個驗證郵箱的步驟,就是在你註冊的時候,平臺會給你的郵箱傳送一封驗證郵件。
今天這篇文章就會手把手帶著同學們如何實現一個自己的郵件傳送系統。以後再也不用擔心女朋友不接你電話了。。。
為什麼大家都愛使用郵件?
因為便宜啊!!!
因為便宜啊!!!
因為便宜啊!!!
重要的事情說三遍!!!
電子郵件的產生
世界上的第一封電子郵件是在1969年10月由計算機科學家LeonardK。教授發給他的同事的一條簡短訊息。據說是“LO”,意思是:“你好!”。Java在誕生之初就支援郵件傳送,但是比較麻煩,已經沒有人在用了;後期Spring框架在Java傳送郵件的基礎之上又進行了封裝,才使得郵件的傳送開始變得簡單,而今天咱們用的都不是以上兩種方式,而是使用SpringBoot完成郵件傳送;因為使用SpringBoot比以上兩種方式還要簡單。
郵件傳送三步走
在開始實現傳送郵件的功能之前,我們先來說一下發送郵件的原理,遵循著宋丹丹老師給我們總結的大象裝冰箱的經典三步法,我們的郵件傳送也可以總結成三個步驟。
第一步:(把冰箱門開啟)
發件人將郵件傳送到郵件傳送伺服器(傳送方的郵件伺服器,如果傳送方是qq郵箱,郵件傳送伺服器就是qq郵箱伺服器;如果傳送方是163郵箱,郵件傳送伺服器就是163郵箱伺服器)
第二步:(把大象裝進去)
郵件傳送伺服器會將郵件傳送到郵件接收伺服器(同理,如果收件方是qq郵箱,郵件接收伺服器就是qq郵箱伺服器;如果接收方是163郵箱,郵件接收伺服器就是163郵箱伺服器)
第三步:(把冰箱門蓋上)
郵件接收伺服器會將接收到的郵件傳送給收件人
郵件傳輸協議
作為一個勤學好問的程式猿,我們當然也要了解下郵件傳送的協議,這個是關乎郵件傳送的最根本的內容。
在上述郵件傳送的過程中,郵件客戶端和郵件伺服器之間,以及兩個郵件伺服器之間進行郵件傳遞,是要遵守一定的規則,這個規則就是郵件傳輸協議。常見的電子郵件協議SMTP、POP3、IMAP,它們都隸屬於TCP/IP協議族,預設狀態下,分別透過TCP埠25、110和143建立連線。下面分別對其進行簡單介紹。
SMTP協議
SMTP的全稱是“Simple Mail Transfer Protocol”,即“簡單郵件傳輸協議”。它是一組用於從源地址到目的地址傳輸郵件的規範,透過它來控制郵件的中轉方式
POP協議
POP全稱是 Post Office Protocol,郵局協議。它定義了郵件客戶端軟體和POP3郵件伺服器的通訊規則。
IMAP
IMAP全稱是 Internet Message Access Protocol,Internet訊息訪問協議,它是對POP3協議的一種擴充套件,也是定義了郵件客戶端軟體和IMAP郵件伺服器的通訊規則
準備工作
這次的案例咱麼使用163郵箱來給qq郵箱傳送郵件,所有要準備好連個郵箱xxx@163。com、xxx@qq。com,這兩個郵箱一個是傳送方,一個是接受方。
配置郵箱授權碼
我們在使用應用程式傳送郵件的是時候,其實就是想要當於是用客戶端傳送郵件,所以我們要在傳送人的郵箱設定開啟客戶端操作,預設是關閉,這個只需要在傳送方的郵箱裡設定下就可以了。
在這個過程中會提示你傳送簡訊,按照給簡訊內容使用自己繫結的手機號傳送即可,然後可以自己輸入授權碼,自己設定的授權碼要記住,以後傳送郵件都要用到。
傳送郵件
好了,到這裡該準備的都準備好了,接下來就開幹了。
首先,使用SpringInitializr初始化器,建立最基礎的SpringBoot工程然後添加發送郵件的依賴項。
<dependency>
<groupId>
org。springframework。boot
</groupId>
<artifactId>
spring-boot-starter-mail
</artifactId>
</dependency>
接下來就要配置郵箱相關的屬性配置,application。properties中新增郵件相關配置。
# 163伺服器
spring。mail。host=smtp。163。com
#發件人郵箱
spring。mail。username=wyliboyu@163。com
#我們自己設定的授權密碼
spring。mail。password=ming438434
#預設埠是25
spring。mail。port=25
#使用smtp協議
spring。mail。protocol=smtp
spring。mail。default-encoding=UTF-8
最後就是最簡單的傳送郵件的程式碼
/**
*傳送簡單郵件
*
*@throws Exception
*/
@Test
public
voidsendMailTest()
throws
Exception{
//簡單郵件
SimpleMailMessage simpleMailMessage =
new
SimpleMailMessage();
// 發件人暱稱
Stringnick = MimeUtility。encodeText(“課工場”);
// 發件人郵箱 simpleMailMessage。setFrom(String。valueOf(
new
InternetAddress(nick+ “<”+ “wyliboyu@163。com”+ “>”)));
// 收件人
simpleMailMessage。setTo(“459829618@qq。com”);
simpleMailMessage。setSubject(“這是一封秘密郵件!!!”);
//4。設定郵件內容
simpleMailMessage。setText(“”);
mailSender。send(simpleMailMessage);
System。out。println(“郵件傳送成功。。。。”);
}
執行程式碼之後,我們來看下效果。
如下是微信繫結的QQ郵箱,顯示的郵件內容。
在網頁開啟收到的郵件,會看到如下圖片,說明我們的郵件傳送成功了。
這裡有一個小問題,如果你在你的收件箱看不到郵件的話,可以去垃圾郵件箱看看,因為系統很可能是把它當作了垃圾郵件。
沒想到這麼簡單就搞定了一個了郵件傳送的系統,是不是很簡單呢,同時大家也應該瞭解到SpringBoot的強大了吧