上篇博客我們簡單介紹了電子郵件的發送和接收過程,對參與其中的郵件服務器,郵件客戶端軟件,郵件傳輸協議也有簡單的介紹。我們知道電子郵件需要在郵件客戶端和郵件服務器之間,以及兩個郵件服務器之間進行傳遞必須遵守的規則便是郵件傳輸協議。SMTP協議定義了郵件客戶端軟件和SMTP郵件服務器之間,以及兩台SMTP郵件服務器之間的通信規則。POP3/IMAP協議定義了郵件客戶端軟件和POP3郵件服務器的通信規則。這篇博客我們就來手工體驗SMTP和POP3協議的奧秘。
1、使用Smtp協議手工發送郵件
SMTP協議:全稱為 Simple Mail Transfer Protocol,簡單郵件傳輸協議。它定義了郵件客戶端軟件和SMTP郵件服務器之間,以及兩台SMTP郵件服務器之間的通信規則。SMTP協議的通信雙方采用一問一答的命令/響應形式進行對話,SMTP協議分為標准SMTP協議和擴展SMTP協議,標准SMTP協議是1982年在RFC821 文檔中定義的,而擴展SMTP協議是1995年在RFC1869 文檔中定義的。擴展SMTP協議在標准 SMTP協議基礎上的改動非常小,主要增加了郵件安全方面的認證功能,現在我們說的SMTP協議基本上都是擴展SMTP協議。
RFC1869文檔參考如下:https://tools.ietf.org/html/rfc1869
SMTP 協議中一共定義了18條命令,但是發送一封電子郵件的過程通常只需要6條命令,我將這6調命令/響應的語法格式總結如下:
大家可能光看這些命令不太清楚,下面我總結了一下使用Smtp協議手工發送郵件的步驟:
①、和SMTP服務器建立連接,telnet smtp.163.com 25。這條命令是和163郵箱建立連接,如果是和QQ,那么將163換成qq即可,同理別的郵箱也是一樣。后面的數字25表示SMTP服務器的端口號。
②、ehlo 發件人用戶名。這沒什么好說的,就是告訴SMTP服務器發送者的用戶名。
③、選擇登錄認證方式,一般我們在第二步執行完后,會提示有幾種認證方式,我們一般選擇的是login。即輸入命令:auth login
④、分別輸入經過Base64加密后的用戶名和密碼。注意必須是要經過 Base64加密后的用戶名和密碼,大家可以網上在線轉,也可以用后面給的代碼進行轉換。
⑤、指明郵件的發送人和收件人
mail from:<xxx@163.com>
rcpt to:<xxx@qq.com>
⑥、輸入data命令,然后編寫要發送的郵件內容,郵件的編寫格式規則如下:
第一步:輸入data
第二步:輸入郵件內容
from:<xxx@163.com> ----郵件頭發件人地址 to:<xxx@qq.com> ----郵件頭收件人地址 subject:hello world ----郵件頭主題 -----空行 This is the first email sent by hand using the SMTP protocol ----郵件的具體內容
⑦、輸入“.”表示郵件內容輸入完畢
⑧、輸入quit命令斷開與郵件服務器的連接
下面我用動圖的形式給大家展示用Smtp協議手工發送郵件的前面三個步驟:
上面我執行到第4步,剩下的步驟我就直接截圖了:
至此,我們一封郵件便發出去了,我們先登陸到QQ郵箱查看(后面我們通過POP3服務器來查收):
2、SMTP發送郵件遇到問題
①、執行 telent smtp.163.com 25 命令時,報如下錯誤:
解決辦法是:控制面板----程序------啟動或關閉 Windows 功能----將Telnet勾上,然后點擊確定即可
②、用戶名和密碼必須要base64加密,在線網站:http://www1.tc711.com/tool/BASE64.htm
③、每一步驟之間輸入命令要盡量快,不然會自動斷開連接
④、我上面是和163郵箱鏈接的,如果是和qq郵箱連接,會有一些問題。首先第一步建立連接為 telnet smtp.qq.com 587,端口號為587,不是25。還有第三步,選擇認證方式,在執行 auth login之前,先執行:starttls。還有第四步,輸入用戶名和授權碼,而不是用戶名和密碼,授權碼的獲取可以參考:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
⑤、輸入郵件內容時,空行不要忘記了,還有結束輸入是以“.”結束的。
3、使用POP3協議手工接收郵件
郵件服務商專門為每個用戶申請的電子郵箱提供了專門的存儲空間,SMTP 服務器將接收到的郵件保存到相應用戶的存儲空間。用戶要從郵件服務提供商提供的電子郵箱中獲取自己的電子郵件,那么就需要POP3 郵件服務器來完成。
POP3協議:全稱為 Post Office Protocol,它定義了郵件客戶端程序和POP3郵件服務器的通信規則。
下面我們演示用POP3協議手工接收郵件:
這是在 163 郵箱的一份郵件。(這里沒有用qq郵箱演示是因為qq有很多安全限制,步驟比較繁瑣,大家遇到問題了可以留言問我)
第一步:用telnet 連接POP3的163郵箱服務器
接下來收取郵件:
相關命令的詳細解釋如下:
4、總結
上面就是通過SMTP協議發送郵件,以及通過POP3協議收取郵件的全部過程。上面我們操作的主體都是163郵箱,換成sina,sohu等郵箱都是可以的。除了qq郵箱會有各種問題,其中一些問題我已經在文中給出了,大家如果還遇到什么問題,歡迎留言交流。
理解手工實現SMTP和POP3收發郵件是很重要的,下篇博客會講如何通過代碼來實現收發郵件,以及后面內嵌圖片,網站等花式寫郵件的講解。如果我們這篇博客理解透徹了,后面的內容理解起來就會事半功倍了。