手工體驗(yàn)smtp和pop3協(xié)議 郵件實(shí)現(xiàn)詳解(二)
上篇博客我們簡單介紹了電子郵件的發(fā)送和接收過程,對參與其中的郵件服務(wù)器,郵件客戶端軟件,郵件傳輸協(xié)議也有簡單的介紹。我們知道電子郵件需要在郵件客戶端和郵件服務(wù)器之間,以及兩個(gè)郵件服務(wù)器之間進(jìn)行傳遞必須遵守的規(guī)則便是郵件傳輸協(xié)議。SMTP協(xié)議定義了郵件客戶端軟件和SMTP郵件服務(wù)器之間,以及兩臺SMTP郵件服務(wù)器之間的通信規(guī)則。POP3/IMAP協(xié)議定義了郵件客戶端軟件和POP3郵件服務(wù)器的通信規(guī)則。這篇博客我們就來手工體驗(yàn)SMTP和POP3協(xié)議的奧秘。
1、使用Smtp協(xié)議手工發(fā)送郵件
SMTP協(xié)議:全稱為 Simple Mail Transfer Protocol,簡單郵件傳輸協(xié)議。它定義了郵件客戶端軟件和SMTP郵件服務(wù)器之間,以及兩臺SMTP郵件服務(wù)器之間的通信規(guī)則。SMTP協(xié)議的通信雙方采用一問一答的命令/響應(yīng)形式進(jìn)行對話,SMTP協(xié)議分為標(biāo)準(zhǔn)SMTP協(xié)議和擴(kuò)展SMTP協(xié)議,標(biāo)準(zhǔn)SMTP協(xié)議是1982年在RFC821 文檔中定義的,而擴(kuò)展SMTP協(xié)議是1995年在RFC1869 文檔中定義的。擴(kuò)展SMTP協(xié)議在標(biāo)準(zhǔn) SMTP協(xié)議基礎(chǔ)上的改動非常小,主要增加了郵件安全方面的認(rèn)證功能,現(xiàn)在我們說的SMTP協(xié)議基本上都是擴(kuò)展SMTP協(xié)議。
RFC1869文檔參考如下:https://tools.ietf.org/html/rfc1869
SMTP 協(xié)議中一共定義了18條命令,但是發(fā)送一封電子郵件的過程通常只需要6條命令,我將這6調(diào)命令/響應(yīng)的語法格式總結(jié)如下:

大家可能光看這些命令不太清楚,下面我總結(jié)了一下使用Smtp協(xié)議手工發(fā)送郵件的步驟:

?、佟⒑蚐MTP服務(wù)器建立連接,telnet smtp.163.com 25。這條命令是和163郵箱建立連接,如果是和QQ,那么將163換成qq即可,同理別的郵箱也是一樣。后面的數(shù)字25表示SMTP服務(wù)器的端口號。
?、?、ehlo 發(fā)件人用戶名。這沒什么好說的,就是告訴SMTP服務(wù)器發(fā)送者的用戶名。
?、邸⑦x擇登錄認(rèn)證方式,一般我們在第二步執(zhí)行完后,會提示有幾種認(rèn)證方式,我們一般選擇的是login。即輸入命令:auth login
?、堋⒎謩e輸入經(jīng)過Base64加密后的用戶名和密碼。注意必須是要經(jīng)過 Base64加密后的用戶名和密碼,大家可以網(wǎng)上在線轉(zhuǎn),也可以用后面給的代碼進(jìn)行轉(zhuǎn)換。
?、?、指明郵件的發(fā)送人和收件人
mail from:<xxx@163.com>
rcpt to:<xxx@qq.com>
?、?、輸入data命令,然后編寫要發(fā)送的郵件內(nèi)容,郵件的編寫格式規(guī)則如下:
第一步:輸入data
第二步:輸入郵件內(nèi)容
from:<xxx@163.com> ----郵件頭發(fā)件人地址
to:<xxx@qq.com> ----郵件頭收件人地址
subject:hello world ----郵件頭主題
-----空行
This is the first email sent by hand using the SMTP protocol ----郵件的具體內(nèi)容
?、?、輸入“.”表示郵件內(nèi)容輸入完畢
⑧、輸入quit命令斷開與郵件服務(wù)器的連接
下面我用動圖的形式給大家展示用Smtp協(xié)議手工發(fā)送郵件的前面三個(gè)步驟:

上面我執(zhí)行到第4步,剩下的步驟我就直接截圖了:

至此,我們一封郵件便發(fā)出去了,我們先登陸到QQ郵箱查看(后面我們通過POP3服務(wù)器來查收):

2、SMTP發(fā)送郵件遇到問題
①、執(zhí)行 telent smtp.163.com 25 命令時(shí),報(bào)如下錯誤:

解決辦法是:控制面板----程序------啟動或關(guān)閉 Windows 功能----將Telnet勾上,然后點(diǎn)擊確定即可

?、?、用戶名和密碼必須要base64加密,在線網(wǎng)站:http://www1.tc711.com/tool/BASE64.htm
?、邸⒚恳徊襟E之間輸入命令要盡量快,不然會自動斷開連接
?、?、我上面是和163郵箱鏈接的,如果是和qq郵箱連接,會有一些問題。首先第一步建立連接為 telnet smtp.qq.com 587,端口號為587,不是25。還有第三步,選擇認(rèn)證方式,在執(zhí)行 auth login之前,先執(zhí)行:starttls。還有第四步,輸入用戶名和授權(quán)碼,而不是用戶名和密碼,授權(quán)碼的獲取可以參考:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
?、荨⑤斎豚]件內(nèi)容時(shí),空行不要忘記了,還有結(jié)束輸入是以“.”結(jié)束的。
3、使用POP3協(xié)議手工接收郵件
郵件服務(wù)商專門為每個(gè)用戶申請的電子郵箱提供了專門的存儲空間,SMTP 服務(wù)器將接收到的郵件保存到相應(yīng)用戶的存儲空間。用戶要從郵件服務(wù)提供商提供的電子郵箱中獲取自己的電子郵件,那么就需要POP3 郵件服務(wù)器來完成。
POP3協(xié)議:全稱為 Post Office Protocol,它定義了郵件客戶端程序和POP3郵件服務(wù)器的通信規(guī)則。
下面我們演示用POP3協(xié)議手工接收郵件:

這是在 163 郵箱的一份郵件。(這里沒有用qq郵箱演示是因?yàn)閝q有很多安全限制,步驟比較繁瑣,大家遇到問題了可以留言問我)
第一步:用telnet 連接POP3的163郵箱服務(wù)器

接下來收取郵件:

相關(guān)命令的詳細(xì)解釋如下:

4、總結(jié)
上面就是通過SMTP協(xié)議發(fā)送郵件,以及通過POP3協(xié)議收取郵件的全部過程。上面我們操作的主體都是163郵箱,換成sina,sohu等郵箱都是可以的。除了qq郵箱會有各種問題,其中一些問題我已經(jīng)在文中給出了,大家如果還遇到什么問題,歡迎留言交流。
理解手工實(shí)現(xiàn)SMTP和POP3收發(fā)郵件是很重要的,下篇博客會講如何通過代碼來實(shí)現(xiàn)收發(fā)郵件,以及后面內(nèi)嵌圖片,網(wǎng)站等花式寫郵件的講解。如果我們這篇博客理解透徹了,后面的內(nèi)容理解起來就會事半功倍了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java學(xué)習(xí)之JVM運(yùn)行時(shí)常量池理解
這篇文章主要介紹了java學(xué)習(xí)之JVM運(yùn)行時(shí)常量池理解,對常量池的好處以及基本類型的包裝類常量池等作了簡要分析,有需要的朋友可以借鑒參考下2021-09-09
完美解決Server?returned?HTTP?response?code:403?for?URL報(bào)錯問題
在調(diào)用某個(gè)接口的時(shí)候,突然就遇到了Server?returned?HTTP?response?code:?403?for?URL報(bào)錯這個(gè)報(bào)錯,導(dǎo)致獲取不到接口的數(shù)據(jù),下面小編給大家分享解決Server?returned?HTTP?response?code:403?for?URL報(bào)錯問題,感興趣的朋友一起看看吧2023-03-03
SpringBoot兩種方式接入DeepSeek的實(shí)現(xiàn)
本文主要介紹了SpringBoot兩種方式接入DeepSeek的實(shí)現(xiàn),包括HttpClient方式和基于spring-ai-openai的方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
IDEA 中創(chuàng)建Spring Data Jpa 項(xiàng)目的示例代碼
這篇文章主要介紹了IDEA 中創(chuàng)建Spring Data Jpa 項(xiàng)目的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
解決在微服務(wù)環(huán)境下遠(yuǎn)程調(diào)用feign和異步線程存在請求數(shù)據(jù)丟失問題
這篇文章主要介紹了解決在微服務(wù)環(huán)境下遠(yuǎn)程調(diào)用feign和異步線程存在請求數(shù)據(jù)丟失問題,主要包括無異步線程得情況下feign遠(yuǎn)程調(diào)用,異步情況下丟失上下文問題,需要的朋友可以參考下2022-05-05
spring-core組件詳解——PropertyResolver屬性解決器
這篇文章主要介紹了spring-core組件詳解——PropertyResolver屬性解決器,需要的朋友可以參考下2016-05-05
詳解SpringBoot 發(fā)布ApplicationEventPublisher和監(jiān)聽ApplicationEvent事
這篇文章主要介紹了詳解SpringBoot 發(fā)布ApplicationEventPublisher和監(jiān)聽ApplicationEvent事件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06

