來源:北大青鳥總部 2023年03月06日 10:13
提到發送郵件相信大家都不陌生,那么作為一個程序猿,除了日常的工作要使用郵件之外,可能還有一個專屬于程序猿的使用郵件場景-郵件系統開發,我們不僅僅使用郵件,還開發郵件。
大家應該經常會有這種經歷,當我們在一些平臺使用郵箱注冊賬號或者在綁定郵箱的的時候,通常都會有一個郵箱驗證激活的步驟。這個驗證郵箱的步驟,就是在你注冊的時候,平臺會給你的郵箱發送一封驗證郵件。
今天這篇文章就會手把手帶著同學們如何實現一個自己的郵件發送系統。以后再也不用擔心女朋友不接你電話了...
因為便宜啊!!!
因為便宜啊!!!
因為便宜啊!!!
重要的事情說三遍!!!
世界上的第一封電子郵件是在1969年10月由計算機科學家LeonardK.教授發給他的同事的一條簡短消息。據說是"LO",意思是:"你好!"。Java在誕生之初就支持郵件發送,但是比較麻煩,已經沒有人在用了;后期Spring框架在Java發送郵件的基礎之上又進行了封裝,才使得郵件的發送開始變的的簡單,而今天咱么用的都不是以上兩種方式,而是使用·完成郵件發送;因為使用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=http://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
publicvoidsendMailTest()throwsException{
//簡單郵件
SimpleMailMessage simpleMailMessage = newSimpleMailMessage();
// 發件人昵稱
Stringnick = MimeUtility.encodeText("課工場");
// 發件人郵箱 simpleMailMessage.setFrom(String.valueOf(newInternetAddress(nick+ "<"+ "wyliboyu@163.com"+ ">")));
// 收件人
simpleMailMessage.setTo("459829618@qq.com");
simpleMailMessage.setSubject("這是一封秘密郵件!!!");
//4.設置郵件內容
simpleMailMessage.setText("");
mailSender.send(simpleMailMessage);
System.out.println("郵件發送成功....");
}
這里有一個小問題,如果你在你的收件箱看不到郵件的話,可以去垃圾郵件箱看看,因為系統很可能是把它當作了垃圾郵件。
沒想到這么簡單就搞定了一個了郵件發送的系統,是不是很簡單呢,同時大家也應該了解到SpringBoot的強大了吧