來(lái)源:北大青鳥(niǎo)總部 2023年03月06日 10:13
提到發(fā)送郵件相信大家都不陌生,那么作為一個(gè)程序猿,除了日常的工作要使用郵件之外,可能還有一個(gè)專屬于程序猿的使用郵件場(chǎng)景-郵件系統(tǒng)開(kāi)發(fā),我們不僅僅使用郵件,還開(kāi)發(fā)郵件。
大家應(yīng)該經(jīng)常會(huì)有這種經(jīng)歷,當(dāng)我們?cè)谝恍┢脚_(tái)使用郵箱注冊(cè)賬號(hào)或者在綁定郵箱的的時(shí)候,通常都會(huì)有一個(gè)郵箱驗(yàn)證激活的步驟。這個(gè)驗(yàn)證郵箱的步驟,就是在你注冊(cè)的時(shí)候,平臺(tái)會(huì)給你的郵箱發(fā)送一封驗(yàn)證郵件。
今天這篇文章就會(huì)手把手帶著同學(xué)們?nèi)绾螌?shí)現(xiàn)一個(gè)自己的郵件發(fā)送系統(tǒng)。以后再也不用擔(dān)心女朋友不接你電話了...
因?yàn)楸阋税。。。?/span>
因?yàn)楸阋税。。。?/span>
因?yàn)楸阋税。。。?/span>
重要的事情說(shuō)三遍!??!
世界上的第一封電子郵件是在1969年10月由計(jì)算機(jī)科學(xué)家LeonardK.教授發(fā)給他的同事的一條簡(jiǎn)短消息。據(jù)說(shuō)是"LO",意思是:"你好!"。Java在誕生之初就支持郵件發(fā)送,但是比較麻煩,已經(jīng)沒(méi)有人在用了;后期Spring框架在Java發(fā)送郵件的基礎(chǔ)之上又進(jìn)行了封裝,才使得郵件的發(fā)送開(kāi)始變的的簡(jiǎn)單,而今天咱么用的都不是以上兩種方式,而是使用·完成郵件發(fā)送;因?yàn)槭褂肧pringBoot比以上兩種方式還要簡(jiǎn)單。
在開(kāi)始實(shí)現(xiàn)發(fā)送郵件的功能之前,我們先來(lái)說(shuō)一下發(fā)送郵件的原理,遵循著宋丹丹老師給我們總結(jié)的大象裝冰箱的經(jīng)典三步法,我們的郵件發(fā)送也可以總結(jié)成三個(gè)步驟。
第一步:(把冰箱門打開(kāi))
發(fā)件人將郵件發(fā)送到郵件發(fā)送服務(wù)器(發(fā)送方的郵件服務(wù)器,如果發(fā)送方是qq郵箱,郵件發(fā)送服務(wù)器就是qq郵箱服務(wù)器;如果發(fā)送方是163郵箱,郵件發(fā)送服務(wù)器就是163郵箱服務(wù)器)
第二步:(把大象裝進(jìn)去)
郵件發(fā)送服務(wù)器會(huì)將郵件發(fā)送到郵件接收服務(wù)器(同理,如果收件方是qq郵箱,郵件接收服務(wù)器就是qq郵箱服務(wù)器;如果接收方是163郵箱,郵件接收服務(wù)器就是163郵箱服務(wù)器)
第三步:(把冰箱門蓋上)
郵件接收服務(wù)器會(huì)將接收到的郵件發(fā)送給收件人
郵件傳輸協(xié)議
作為一個(gè)勤學(xué)好問(wèn)的程序猿,我們當(dāng)然也要了解下郵件發(fā)送的協(xié)議,這個(gè)是關(guān)乎郵件發(fā)送的最根本的內(nèi)容。
在上述郵件發(fā)送的過(guò)程中,郵件客戶端和郵件服務(wù)器之間,以及兩個(gè)郵件服務(wù)器之間進(jìn)行郵件傳遞,是要遵守一定的規(guī)則,這個(gè)規(guī)則就是郵件傳輸協(xié)議。常見(jiàn)的電子郵件協(xié)議SMTP、POP3、IMAP,它們都隸屬于TCP/IP協(xié)議族,默認(rèn)狀態(tài)下,分別通過(guò)TCP端口25、110和143建立連接。下面分別對(duì)其進(jìn)行簡(jiǎn)單介紹。
SMTP協(xié)議
SMTP的全稱是“Simple Mail Transfer Protocol”,即"簡(jiǎn)單郵件傳輸協(xié)議"。它是一組用于從源地址到目的地址傳輸郵件的規(guī)范,通過(guò)它來(lái)控制郵件的中轉(zhuǎn)方式
POP協(xié)議
POP全稱是 Post Office Protocol,郵局協(xié)議。它定義了郵件客戶端軟件和POP3郵件服務(wù)器的通信規(guī)則。
IMAP
IMAP全稱是 Internet Message Access Protocol,Internet消息訪問(wèn)協(xié)議,它是對(duì)POP3協(xié)議的一種擴(kuò)展,也是定義了郵件客戶端軟件和IMAP郵件服務(wù)器的通信規(guī)則
準(zhǔn)備工作
這次的案例咱么使用163郵箱來(lái)給qq郵箱發(fā)送郵件,所有要準(zhǔn)備好連個(gè)郵箱xxx@163.com、xxx@qq.com,這兩個(gè)郵箱一個(gè)是發(fā)送方,一個(gè)是接受方。
配置郵箱授權(quán)碼
我們?cè)谑褂脩?yīng)用程序發(fā)送郵件的是時(shí)候,其實(shí)就是想要當(dāng)于是用客戶端發(fā)送郵件,所以我們要在發(fā)送人的郵箱設(shè)置開(kāi)啟客戶端操作,默認(rèn)是關(guān)閉,這個(gè)只需要在發(fā)送方的郵箱了設(shè)置下就可以了。
在這個(gè)過(guò)程中會(huì)提示你發(fā)送短信,按照給短信內(nèi)容使用自己綁定的手機(jī)號(hào)發(fā)送即可,然后可以自己輸入授權(quán)碼,自己設(shè)置的授權(quán)碼要記住,以后發(fā)送郵件都要用到。
發(fā)送郵件
好了,到這里該準(zhǔn)備的都準(zhǔn)備好了,接下來(lái)就開(kāi)干了。
首先,使用SpringInitializr初始化器,創(chuàng)建最基礎(chǔ)的SpringBoot工程讓后添加發(fā)送郵件的依賴項(xiàng)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
接下來(lái)就要配置郵箱相關(guān)的屬性配置,application.properties中添加郵件相關(guān)配置。
# 163服務(wù)器
spring.mail.host=http://smtp.163.com
#發(fā)件人郵箱
spring.mail.username=wyliboyu@163.com
#我們自己設(shè)置的授權(quán)密碼
spring.mail.password=ming438434
#默認(rèn)端口是25
spring.mail.port=25
#使用smtp協(xié)議
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8
最后就是最簡(jiǎn)單的發(fā)送郵的代碼
/**
*發(fā)送簡(jiǎn)單郵件
*
*@throws Exception
*/
@Test
publicvoidsendMailTest()throwsException{
//簡(jiǎn)單郵件
SimpleMailMessage simpleMailMessage = newSimpleMailMessage();
// 發(fā)件人昵稱
Stringnick = MimeUtility.encodeText("課工場(chǎng)");
// 發(fā)件人郵箱 simpleMailMessage.setFrom(String.valueOf(newInternetAddress(nick+ "<"+ "wyliboyu@163.com"+ ">")));
// 收件人
simpleMailMessage.setTo("459829618@qq.com");
simpleMailMessage.setSubject("這是一封秘密郵件?。?!");
//4.設(shè)置郵件內(nèi)容
simpleMailMessage.setText("");
mailSender.send(simpleMailMessage);
System.out.println("郵件發(fā)送成功....");
}
這里有一個(gè)小問(wèn)題,如果你在你的收件箱看不到郵件的話,可以去垃圾郵件箱看看,因?yàn)橄到y(tǒng)很可能是把它當(dāng)作了垃圾郵件。
沒(méi)想到這么簡(jiǎn)單就搞定了一個(gè)了郵件發(fā)送的系統(tǒng),是不是很簡(jiǎn)單呢,同時(shí)大家也應(yīng)該了解到SpringBoot的強(qiáng)大了吧