上篇博客咱們簡單介紹了電子郵件的發送和接收過程,對參與其中的郵件服務器,郵件客戶端軟件,郵件傳輸協議也有簡單的介紹。咱們知道電子郵件須要在郵件客戶端和郵件服務器之間,以及兩個郵件服務器之間進行傳遞必須遵照的規則即是郵件傳輸協議。SMTP協議定義了郵件客戶端軟件和SMTP郵件服務器之間,以及兩臺SMTP郵件服務器之間的通訊規則。POP3/IMAP協議定義了郵件客戶端軟件和POP3郵件服務器的通訊規則。這篇博客咱們就來手工體驗SMTP和POP3協議的奧祕。html
SMTP協議:全稱爲 Simple Mail Transfer Protocol,簡單郵件傳輸協議。它定義了郵件客戶端軟件和SMTP郵件服務器之間,以及兩臺SMTP郵件服務器之間的通訊規則。SMTP協議的通訊雙方採用一問一答的命令/響應形式進行對話,SMTP協議分爲標準SMTP協議和擴展SMTP協議,標準SMTP協議是1982年在RFC821 文檔中定義的,而擴展SMTP協議是1995年在RFC1869 文檔中定義的。擴展SMTP協議在標準 SMTP協議基礎上的改動很是小,主要增長了郵件安全方面的認證功能,如今咱們說的SMTP協議基本上都是擴展SMTP協議。java
RFC1869文檔參考以下:https://tools.ietf.org/html/rfc1869安全
SMTP 協議中一共定義了18條命令,可是發送一封電子郵件的過程一般只須要6條命令,我將這6調命令/響應的語法格式總結以下:服務器
你們可能光看這些命令不太清楚,下面我總結了一下使用Smtp協議手工發送郵件的步驟:網站
①、和SMTP服務器創建鏈接,telnet smtp.163.com 25。這條命令是和163郵箱創建鏈接,若是是和QQ,那麼將163換成qq便可,同理別的郵箱也是同樣。後面的數字25表示SMTP服務器的端口號。ui
②、ehlo 發件人用戶名。這沒什麼好說的,就是告訴SMTP服務器發送者的用戶名。加密
③、選擇登陸認證方式,通常咱們在第二步執行完後,會提示有幾種認證方式,咱們通常選擇的是login。即輸入命令:auth login3d
④、分別輸入通過Base64加密後的用戶名和密碼。注意必須是要通過 Base64加密後的用戶名和密碼,你們能夠網上在線轉,也能夠用後面給的代碼進行轉換。htm
⑤、指明郵件的發送人和收件人blog
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服務器來查收):
①、執行 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
⑤、輸入郵件內容時,空行不要忘記了,還有結束輸入是以「.」結束的。
郵件服務商專門爲每一個用戶申請的電子郵箱提供了專門的存儲空間,SMTP 服務器將接收到的郵件保存到相應用戶的存儲空間。用戶要從郵件服務提供商提供的電子郵箱中獲取本身的電子郵件,那麼就須要POP3 郵件服務器來完成。
POP3協議:全稱爲 Post Office Protocol,它定義了郵件客戶端程序和POP3郵件服務器的通訊規則。
下面咱們演示用POP3協議手工接收郵件:
這是在 163 郵箱的一份郵件。(這裏沒有用qq郵箱演示是由於qq有不少安全限制,步驟比較繁瑣,你們遇到問題了能夠留言問我)
第一步:用telnet 鏈接POP3的163郵箱服務器
接下來收取郵件:
相關命令的詳細解釋以下:
上面就是經過SMTP協議發送郵件,以及經過POP3協議收取郵件的所有過程。上面咱們操做的主體都是163郵箱,換成sina,sohu等郵箱都是能夠的。除了qq郵箱會有各類問題,其中一些問題我已經在文中給出了,你們若是還遇到什麼問題,歡迎留言交流。
理解手工實現SMTP和POP3收發郵件是很重要的,下篇博客會講如何經過代碼來實現收發郵件,以及後面內嵌圖片,網站等花式寫郵件的講解。若是咱們這篇博客理解透徹了,後面的內容理解起來就會事半功倍了。