E-mail概述 | 郵件發送協議SMTP與郵件讀取協議POP3、IMAP

電子郵件系統的組成

先來認識一下,一個電子郵件系統應當由這幾個主要部分組成——


簡潔起見,這里沒有畫出數量龐大的郵件服務器所組成的網絡。從上圖可以看出,這里采用常用的SMTP作為郵件發送協議,采用常用的POP3作為郵件讀取協議。請注意,SMTP和 POP3 (或IMAP)都是使用TCP連接來傳送郵件的,使用TCP的目的是為了可靠地傳送 郵件。


長篇大論表述這個過程

用戶代理UA(User Agent)

用戶代理就是用戶與電子郵件系統的接口,在大多數情況下它就是運行在用戶電腦中的一個程序。因此用戶代理又稱為電子郵件客戶端軟件
用戶代理向用戶提供一個很友好的接口(目前主要是窗口界面)來發送和接收郵件。現在可供大家選擇的用戶代理有很多種。例如,比較受歡迎的Outlook、Foxmail。

用戶代理至少應當具有以下4個功能。

  • 撰寫。給用戶提供編輯信件的環境。例如,應讓用戶能創建便于使用的通訊錄(有常用的人名和地址)。回信時不僅能很方便地從來信中提取出對方地址,并自動地將此地址寫入到郵件中合適的位置,而且還能方便地對來信提出的問題進行答復(系統自動將來信復制一份在用戶撰寫回信的窗口中,因而用戶不需要再輸入來信中的問題)。
  • 顯示。能方便地在計算機屏幕上顯示出來信(包括來信附上的聲音和圖像)。
  • 處理。處理包括發送郵件和接收郵件。收件人應能根據情況按不同方式對來信進行處理。例如,閱讀后刪除、存盤、打印、轉發等,以及自建目錄對來信進行分類保存。有時還可在讀取信件之前先査看一下郵件的發件人和長度等,對于不愿收的信件可直接在郵箱中刪除。
  • 通信。發信人在撰寫完郵件后,要利用郵件發送協議發送到用戶所使用的郵件服務器。收件人在接收郵件時,要使用郵件讀取協議從本地郵件服務器接收郵件。

郵件服務器

郵件服務器的功能是發送和接收郵 件,同時還要向發件人報告郵件傳送的結果(已交付、被拒絕、丟失等)。郵件服務器按照 客戶服務器方式(C/S)工作。郵件服務器需要使用兩種不同的協議。一種協議用于用戶代理向郵件 服務器發送郵件或在郵件服務器之間發送郵件,如SMTP協議,而另一種協議用于用戶代 理從郵件服務器讀取郵件,如郵局協議POP3。

這里應當注意,郵件服務器必須能夠同時充當客戶和服務器。例如,當郵件服務器A向另一個郵件服務器B發送郵件時,A就作為SMTP客戶,而B是SMTP服務器。反之,當B向A發送郵件時,B就是SMTP客戶,而A就是SMTP服務器。

郵件發送協議

這里以簡單郵件傳送協議SMTP來講——
SMTP規定了在兩個相互通信的SMTP進程之間應如何交換信息。由于SMTP使用客戶服務器方式,因此負責發送郵件的SMTP進程就是SMTP客戶,而負責接收郵件的SMTP進程就是SMTP服務器。至于郵件內部的格式,郵件如何存儲,以及郵件系統應以多快的速度來發送郵件,SMTP也都未做出規定。

發件人的郵件送到發送方郵件服務器的郵件緩存后,SMTP客戶就每隔一定時間對郵件緩存掃描一次。如發現有郵件,就使用SMTP的熟知端口號碼25與接收方郵件服務器的SMTP服務器建立TCP連接
在連接建立后,接收方SMTP服務器要發出“220 Service ready”(服務就緒)。然后SMTP客戶向SMTP服務器發送HELO命令,附上發送方的主機名。SMTP服務器若有能力接收郵件,則回答:“250 OK”,表示已準備好接收。若SMTP服務器不可用,則回答“421 Service not available”(服務不可用)。如在一定時間內發送不了郵件,郵件服務器會把這個情況通知發件人。

SMTP不使用中間的郵件服務器。不管發送方和接收方的郵件服務器相隔有多遠,不管在郵件傳送過程中要經過多少個路由器,TCP連接總是在發送方和接收方這兩個郵件服務器之間直接建立。當接收方郵件服務器出故障而不能工作時,發送方郵件服務器只能等待一段時間后再嘗試和該郵件服務器建立TCP連接,而不能先找一個中間的郵件服務器建立TCP連接。

郵件的傳送從MAIL命令開始。MAIL命令后面有發件人的地址。如:MAIL FROM:xxxx@huawei.com。若SMTP服務器己準備好接收郵件,則回答“250 OK”。否則,返回一個代碼,指出原因。

451(處理時出錯),452(存儲空間不夠),500(命令無法識別)。

下面跟著一個或多個RCPT命令(recipient收件人的縮寫),取決于把同一個郵件發送給一個或多個收件人。其格式為RCPT TO:<收件人地址>。RCPT命令的作用就是:先弄清接收方系統是否己做好接收郵件的準備,然后才發送郵件。這樣做是為了避免浪費通信資源,不至于發送了很長的郵件以后才知道地址錯誤。
每發送一個RCPT命令,都應當有相應的信息從SMTP服務器返回,如:“250 OK”,表示指明的郵箱在接收方的系統中,或“550 No such user here”(無此用戶),即不存在此郵箱。

再下面就是DATA命令,表示要開始傳送郵件的內容了。SMTP服務器返回的信息是:“354 Start mail input; end with<CRLF>.<CRLF>”。這里<CRLF>是“回車換行”的意思。若不能接收郵件,則返回421(服務器不可用),500(命令無法識別)等。
接著SMTP客戶就發送郵件的內容。發送完畢后,再發送<CRLF>.<CRLF>(兩個回車換行中間用一個點隔開)表示郵件內容結束。實際上在服務器端看到的可打印字符只是一個英文的句點。若郵件收到了,則SMTP服務器返回信息“250 OK”,或返回差錯代碼。

最后,郵件發送完畢后,SMTP客戶應發送QUIT命令。SMTP服務器返回的信息是“221(服務關閉)”,則表示SMTP同意釋放TCP連接。郵件傳送的全部過程即結束。

這里再強調一下,使用電子郵件的用戶看不見以上這些過程,所有這些復雜過程都被電子郵件的用戶代理屏蔽了。

郵件讀取協議

現在常用的郵件讀取協議有兩個,即郵局協議第3個版本POP3和網際報文存取協議
IMAP (Internet Message Access Protocol)。

POP3

郵局協議POP是一個非常簡單、但功能有限的郵件讀取協議。郵局協議POP最初公布于1984年。經過幾次更新,現在使用的是1996年的版本POP3 [RFC 1939],它己成為互聯網的正式標準。

在接收郵件的用戶計算機中的用戶代理必須運行POP3客戶程序,而在收件人所連接的郵件服務器中則運行POP3服務器程序。當然,這個郵件服務器還必須運行SMTP服務器程序,以便接收發送方郵件服務器的SMTP客戶程序發來的郵件。P0P3服務器只有在用戶輸入鑒別信息(用戶名和口令)后,才允許對郵箱進行讀取。

POP3協議的一個特點就是只要用戶從POP3服務器讀取了郵件,POP3服務器就把該郵件刪除。這在某些情況下就不夠方便。例如,某用戶在辦公室的臺式計算機上接收了一個郵件,還來不及寫回信,就馬上攜帶筆記本電腦出差。當他打開筆記本電腦寫回信時,POP3服務器上卻己經刪除了原來己經看過的郵件(除非他事先將這些郵件復制到筆記本電腦中)。為了解決這一問題,POP3進行了一些功能擴充,其中包括讓用戶能夠事先設置郵件讀取后仍然在POP3服務器中存放的時間[RFC2449]。目前RFC2449是互聯網建議標準。

IMAP

另一個讀取郵件的協議是網際報文存取協議IMAP,它比POP3復雜得多。IMAP和POP都按客戶服務器方式工作,但它們有很大的差別。現在較新的版本是2003年3月修訂的版本4,即IMAP4[RFC3501],它目前也是互聯網的建議標準。不過在習慣上,對這個協議大家很少加上版本號“4”,而經常簡單地用IMAP表示IMAP4。但是對POP3卻不會忘記寫上版本號“3"。

在使用IMAP時,在用戶的計算機上運行IMAP客戶程序,然后與接收方的郵件服務器上的IMAP服務器程序建立TCP連接。用戶在自己的計算機上就可以操縱郵件服務器的郵箱,就像在本地操縱一樣,因此IMAP是一個聯機協議

當用戶計算機上的IMAP客戶程序打開IMAP服務器的郵箱時,用戶就可看到郵件的首部。若用戶需要打開某個郵件,則該郵件才傳到用戶的計算機上。用戶可以根據需要為自己的郵箱創建便于分類管理的層次式的郵箱文件夾,并且能夠將存放的郵件從某一個文件夾中移動到另一個文件夾中。用戶也可按某種條件對郵件進行查找。在用戶未發出刪除郵件的命令之前,IMAP服務器郵箱中的郵件一直保存著。

IMAP最大的好處就是用戶可以在不同的地方使用不同的計算機(例如,使用辦公室的計算機、或家中的計算機,或在外地使用筆記本電腦)隨時上網閱讀和處理自己在郵件服務器中的郵件。

IMAP還允許收件人只讀取郵件中的某一個部分。例如,收到了一個帶有視像附件(此文件可能很大)的郵件,而用戶使用的是無線上網,信道的傳輸速率很低。為了節附件(此文件可能很大)的郵件,而用戶使用的是無線上網,信道的傳輸速率很低。為了節省時間,可以先下載郵件的正文部分,待以后有時間再讀取或下載這個很大的附件。

IMAP的缺點是如果用戶沒有將郵件復制到自己的計算機上,則郵件一直存放在IMAP服務器上。要想查閱自己的郵件,必須先上網。

POP3與IMAP的對比

基于萬維網的電子郵件

從前面的圖可看出,用戶要使用電子郵件,必須在自己使用的計算機中安裝用戶代理軟件UA。如果外出到某地而又未攜帶自己的筆記本電腦,那么要使用別人的計算機進行電子郵件的收發,將是非常不方便的。

現在這個問題解決了。在20世紀90年代中期,Hotmail推出了基于萬維網的電子郵件(Webmail)。今天,幾乎所有的著名網站以及大學或公司,都提供了萬維網電子郵件。常用的萬維網電子郵件有谷歌的Gmail,微軟的Hotmail,雅虎的Yahoo Mail。網易的163或126、新浪的sina等互聯網技術公司也都提供萬維網郵件服務。

萬維網電子郵件的好處就是:不管在什么地方(在任何一個國家的網吧、賓館或朋友家中),只要能夠找到上網的計算機,在打開任何一種瀏覽器后,就可以非常方便地收發電子郵件。使用萬維網電子郵件不需要在計算機中再安裝用戶代理軟件。瀏覽器本身可以向用戶提供非常友好的電子郵件界面(和原來的用戶代理提供的界面相似),使用戶在瀏覽器上就能夠很方便地撰寫和收發電子郵件。

你曾經接收和發送過的郵件、己刪除的郵件以及你的通訊錄等內容,都照常呈現在屏幕上。我們知道,用戶在瀏覽器中瀏覽各種信息時需要使用HTTP協議。因此,在瀏覽器和互聯網上的郵件服務器之間傳送郵件時,仍然使用HTTP協議。但是在各郵件服務器之間傳送郵件時,則仍然使用SMTP協議

補充與思考

  1. 前面的知識告訴我們,有兩種不同的通信方式:“推”(push):SMTP客戶把郵件“推”給SMTP服務器。“拉”(pull):POP3客戶把郵件從POP3服務器“拉”過來。
    你可能會想到這樣的問題:如果讓郵件服務器程序就在發送方和接收方的計算機中運行,那么豈不是可以直接把郵件發送到收件人的計算機中?
    ——
    答案是“不行”。這是因為并非所有的計算機都能運行郵件服務器程序。有些計算機可能沒有足夠的存儲空間來運行允許程序在后臺運行的操作系統,或是可能沒有足夠的CPU能力來運行郵件服務器程序。
    更重要的是,郵件服務器程序必須不間斷地運行,每天24小時都必須不間斷地連接在互聯網上,否則就可能使很多外面發來的郵件無法接收。
    這樣看來,讓用戶的計算機運行郵件服務器程序顯然是很不現實的(一般用戶在不使用計算機時就將機器關閉)。讓來信暫時存儲在用戶的郵件服務器中,而當用戶方便時就從郵件服務器的用戶信箱中讀取來信,則是一種比較合理的做法。
  1. 雖然SMTP使用TCP連接試圖使郵件的傳送可靠,但“發送成功”并不等于“收件人讀取了這個郵件”。
    ——
    當一個郵件傳送到接收方的郵件服務器后(即接收方的郵件服務器收下了這個郵件),再往后的情況如何,就有好幾種可能性。接收方的郵件服務器也可能接著就出了故障,使收到的郵件全部丟失(在收件人讀取信件之前)》也可能被郵件服務器的軟件當作垃圾郵件刪除了。也可能收件人在清理自己的郵箱時,把尚未讀取的郵件一起都刪除了。有時收件人由于某種原因,很久沒有查閱自己的郵箱,根本不知道自己的郵箱中有一些來信。因此,一個郵件即使是“發送成功”,收件人也不一定會讀取到這個郵件。盡管如此,基于SMTP的電子郵件通常都被認為是可靠的。

  2. 己經廣泛使用多年的SMTP存在著一些缺點。例如,發送電子郵件不需要經過鑒別。這就是說,在FROM命令后面的地址可以任意填寫。這就大大方便了垃圾郵件的作者,給收信人添加了麻煩。又如,SMTP本來就是為傳送ASCII碼而不是傳送二進制數據設計的。雖然后來有了MIME(Multipurpose Internet Mail Extensions)可以傳送二進制數據,但在傳送非ASCII碼的長報文時,在網絡上的傳輸效率是不高的。此外,SMTP傳送的郵件是明文,不利于保密。
    ——
    為了解決上述問題,2008年10月頒布的RFC 5321對SMTP進行了擴充,成為擴充的SMTP(Extended SMTP),記為ESMTP。RFC 5321在許多命令中增加了擴展的參數。新增加的功能有:客戶端的鑒別,服務器接受二進制報文,服務器接受分塊傳送的大報文,發送前先檢査報文的大小,使用安全傳輸TLS,以及使用國際化地址等。
    考慮到現在的許多SMTP郵件服務器可能還沒有升級到ESMTP,因此特規定使用ESMTP的客戶端在準備傳送報文時,不是發送HELO而是發送EHLO報文。如果EHLO報文被對方服務器端拒絕,就表明對方仍然是一個標準的SMTP郵件服務器(不使用擴展的參數),因而就要按照原來使用的SMTP參數進行郵件的傳送。如果EHLO報文被接受了,那么客戶端就可以使用ESMTP擴展的參數傳送報文了。

  3. 有興趣的話,可以來了解下MIME與SMTP的關系。

摘抄于文獻

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 這是孫偉每天一篇文章的第47天 元認知是認知的認知。 幽默感就是智力過勝的表現,就是回答問題后還要玩一下。 智慧就...
    孫偉愛學習閱讀 414評論 0 0
  • 奶奶于2014年6月8日去世,享年80歲。 5月底的端午節還曾回去看過奶奶,情況有些不好,奶奶身體不好...
    泡影忍者閱讀 772評論 0 0
  • 語文是畫黑線的,概念是畫三角的,應用題是畫@的
    宇宙王浩宇閱讀 267評論 0 0
  • ###字符數組的定義:有一定順序關系的若干個字符型變量的集合,就是字符數組。可以是一維的,也可以是多維的。字符數組...
    鄰家的妹妹閱讀 780評論 0 1