電子郵件系統(tǒng)的組成
先來認識一下,一個電子郵件系統(tǒng)應(yīng)當(dāng)由這幾個主要部分組成——

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

用戶代理UA(User Agent)
用戶代理就是用戶與電子郵件系統(tǒng)的接口,在大多數(shù)情況下它就是運行在用戶電腦中的一個程序。因此用戶代理又稱為電子郵件客戶端軟件。
用戶代理向用戶提供一個很友好的接口(目前主要是窗口界面)來發(fā)送和接收郵件。現(xiàn)在可供大家選擇的用戶代理有很多種。例如,比較受歡迎的Outlook、Foxmail。
用戶代理至少應(yīng)當(dāng)具有以下4個功能。
- 撰寫。給用戶提供編輯信件的環(huán)境。例如,應(yīng)讓用戶能創(chuàng)建便于使用的通訊錄(有常用的人名和地址)?;匦艜r不僅能很方便地從來信中提取出對方地址,并自動地將此地址寫入到郵件中合適的位置,而且還能方便地對來信提出的問題進行答復(fù)(系統(tǒng)自動將來信復(fù)制一份在用戶撰寫回信的窗口中,因而用戶不需要再輸入來信中的問題)。
- 顯示。能方便地在計算機屏幕上顯示出來信(包括來信附上的聲音和圖像)。
- 處理。處理包括發(fā)送郵件和接收郵件。收件人應(yīng)能根據(jù)情況按不同方式對來信進行處理。例如,閱讀后刪除、存盤、打印、轉(zhuǎn)發(fā)等,以及自建目錄對來信進行分類保存。有時還可在讀取信件之前先査看一下郵件的發(fā)件人和長度等,對于不愿收的信件可直接在郵箱中刪除。
- 通信。發(fā)信人在撰寫完郵件后,要利用郵件發(fā)送協(xié)議發(fā)送到用戶所使用的郵件服務(wù)器。收件人在接收郵件時,要使用郵件讀取協(xié)議從本地郵件服務(wù)器接收郵件。
郵件服務(wù)器
郵件服務(wù)器的功能是發(fā)送和接收郵 件,同時還要向發(fā)件人報告郵件傳送的結(jié)果(已交付、被拒絕、丟失等)。郵件服務(wù)器按照 客戶服務(wù)器方式(C/S)工作。郵件服務(wù)器需要使用兩種不同的協(xié)議。一種協(xié)議用于用戶代理向郵件 服務(wù)器發(fā)送郵件或在郵件服務(wù)器之間發(fā)送郵件,如SMTP協(xié)議,而另一種協(xié)議用于用戶代 理從郵件服務(wù)器讀取郵件,如郵局協(xié)議POP3。
這里應(yīng)當(dāng)注意,郵件服務(wù)器必須能夠同時充當(dāng)客戶和服務(wù)器。例如,當(dāng)郵件服務(wù)器A向另一個郵件服務(wù)器B發(fā)送郵件時,A就作為SMTP客戶,而B是SMTP服務(wù)器。反之,當(dāng)B向A發(fā)送郵件時,B就是SMTP客戶,而A就是SMTP服務(wù)器。
郵件發(fā)送協(xié)議
這里以簡單郵件傳送協(xié)議SMTP來講——
SMTP規(guī)定了在兩個相互通信的SMTP進程之間應(yīng)如何交換信息。由于SMTP使用客戶服務(wù)器方式,因此負責(zé)發(fā)送郵件的SMTP進程就是SMTP客戶,而負責(zé)接收郵件的SMTP進程就是SMTP服務(wù)器。至于郵件內(nèi)部的格式,郵件如何存儲,以及郵件系統(tǒng)應(yīng)以多快的速度來發(fā)送郵件,SMTP也都未做出規(guī)定。
發(fā)件人的郵件送到發(fā)送方郵件服務(wù)器的郵件緩存后,SMTP客戶就每隔一定時間對郵件緩存掃描一次。如發(fā)現(xiàn)有郵件,就使用SMTP的熟知端口號碼25與接收方郵件服務(wù)器的SMTP服務(wù)器建立TCP連接。
在連接建立后,接收方SMTP服務(wù)器要發(fā)出“220 Service ready”(服務(wù)就緒)。然后SMTP客戶向SMTP服務(wù)器發(fā)送HELO命令,附上發(fā)送方的主機名。SMTP服務(wù)器若有能力接收郵件,則回答:“250 OK”,表示已準備好接收。若SMTP服務(wù)器不可用,則回答“421 Service not available”(服務(wù)不可用)。如在一定時間內(nèi)發(fā)送不了郵件,郵件服務(wù)器會把這個情況通知發(fā)件人。
SMTP不使用中間的郵件服務(wù)器。不管發(fā)送方和接收方的郵件服務(wù)器相隔有多遠,不管在郵件傳送過程中要經(jīng)過多少個路由器,TCP連接總是在發(fā)送方和接收方這兩個郵件服務(wù)器之間直接建立。當(dāng)接收方郵件服務(wù)器出故障而不能工作時,發(fā)送方郵件服務(wù)器只能等待一段時間后再嘗試和該郵件服務(wù)器建立TCP連接,而不能先找一個中間的郵件服務(wù)器建立TCP連接。
郵件的傳送從MAIL命令開始。MAIL命令后面有發(fā)件人的地址。如:MAIL FROM:xxxx@huawei.com。若SMTP服務(wù)器己準備好接收郵件,則回答“250 OK”。否則,返回一個代碼,指出原因。
451(處理時出錯),452(存儲空間不夠),500(命令無法識別)。
下面跟著一個或多個RCPT命令(recipient收件人的縮寫),取決于把同一個郵件發(fā)送給一個或多個收件人。其格式為RCPT TO:<收件人地址>。RCPT命令的作用就是:先弄清接收方系統(tǒng)是否己做好接收郵件的準備,然后才發(fā)送郵件。這樣做是為了避免浪費通信資源,不至于發(fā)送了很長的郵件以后才知道地址錯誤。
每發(fā)送一個RCPT命令,都應(yīng)當(dāng)有相應(yīng)的信息從SMTP服務(wù)器返回,如:“250 OK”,表示指明的郵箱在接收方的系統(tǒng)中,或“550 No such user here”(無此用戶),即不存在此郵箱。
再下面就是DATA命令,表示要開始傳送郵件的內(nèi)容了。SMTP服務(wù)器返回的信息是:“354 Start mail input; end with<CRLF>.<CRLF>”。這里<CRLF>是“回車換行”的意思。若不能接收郵件,則返回421(服務(wù)器不可用),500(命令無法識別)等。
接著SMTP客戶就發(fā)送郵件的內(nèi)容。發(fā)送完畢后,再發(fā)送<CRLF>.<CRLF>(兩個回車換行中間用一個點隔開)表示郵件內(nèi)容結(jié)束。實際上在服務(wù)器端看到的可打印字符只是一個英文的句點。若郵件收到了,則SMTP服務(wù)器返回信息“250 OK”,或返回差錯代碼。
最后,郵件發(fā)送完畢后,SMTP客戶應(yīng)發(fā)送QUIT命令。SMTP服務(wù)器返回的信息是“221(服務(wù)關(guān)閉)”,則表示SMTP同意釋放TCP連接。郵件傳送的全部過程即結(jié)束。
這里再強調(diào)一下,使用電子郵件的用戶看不見以上這些過程,所有這些復(fù)雜過程都被電子郵件的用戶代理屏蔽了。
郵件讀取協(xié)議
現(xiàn)在常用的郵件讀取協(xié)議有兩個,即郵局協(xié)議第3個版本POP3和網(wǎng)際報文存取協(xié)議
IMAP (Internet Message Access Protocol)。
POP3
郵局協(xié)議POP是一個非常簡單、但功能有限的郵件讀取協(xié)議。郵局協(xié)議POP最初公布于1984年。經(jīng)過幾次更新,現(xiàn)在使用的是1996年的版本POP3 [RFC 1939],它己成為互聯(lián)網(wǎng)的正式標(biāo)準。
在接收郵件的用戶計算機中的用戶代理必須運行POP3客戶程序,而在收件人所連接的郵件服務(wù)器中則運行POP3服務(wù)器程序。當(dāng)然,這個郵件服務(wù)器還必須運行SMTP服務(wù)器程序,以便接收發(fā)送方郵件服務(wù)器的SMTP客戶程序發(fā)來的郵件。P0P3服務(wù)器只有在用戶輸入鑒別信息(用戶名和口令)后,才允許對郵箱進行讀取。
POP3協(xié)議的一個特點就是只要用戶從POP3服務(wù)器讀取了郵件,POP3服務(wù)器就把該郵件刪除。這在某些情況下就不夠方便。例如,某用戶在辦公室的臺式計算機上接收了一個郵件,還來不及寫回信,就馬上攜帶筆記本電腦出差。當(dāng)他打開筆記本電腦寫回信時,POP3服務(wù)器上卻己經(jīng)刪除了原來己經(jīng)看過的郵件(除非他事先將這些郵件復(fù)制到筆記本電腦中)。為了解決這一問題,POP3進行了一些功能擴充,其中包括讓用戶能夠事先設(shè)置郵件讀取后仍然在POP3服務(wù)器中存放的時間[RFC2449]。目前RFC2449是互聯(lián)網(wǎng)建議標(biāo)準。
IMAP
另一個讀取郵件的協(xié)議是網(wǎng)際報文存取協(xié)議IMAP,它比POP3復(fù)雜得多。IMAP和POP都按客戶服務(wù)器方式工作,但它們有很大的差別?,F(xiàn)在較新的版本是2003年3月修訂的版本4,即IMAP4[RFC3501],它目前也是互聯(lián)網(wǎng)的建議標(biāo)準。不過在習(xí)慣上,對這個協(xié)議大家很少加上版本號“4”,而經(jīng)常簡單地用IMAP表示IMAP4。但是對POP3卻不會忘記寫上版本號“3"。
在使用IMAP時,在用戶的計算機上運行IMAP客戶程序,然后與接收方的郵件服務(wù)器上的IMAP服務(wù)器程序建立TCP連接。用戶在自己的計算機上就可以操縱郵件服務(wù)器的郵箱,就像在本地操縱一樣,因此IMAP是一個聯(lián)機協(xié)議。
當(dāng)用戶計算機上的IMAP客戶程序打開IMAP服務(wù)器的郵箱時,用戶就可看到郵件的首部。若用戶需要打開某個郵件,則該郵件才傳到用戶的計算機上。用戶可以根據(jù)需要為自己的郵箱創(chuàng)建便于分類管理的層次式的郵箱文件夾,并且能夠?qū)⒋娣诺泥]件從某一個文件夾中移動到另一個文件夾中。用戶也可按某種條件對郵件進行查找。在用戶未發(fā)出刪除郵件的命令之前,IMAP服務(wù)器郵箱中的郵件一直保存著。
IMAP最大的好處就是用戶可以在不同的地方使用不同的計算機(例如,使用辦公室的計算機、或家中的計算機,或在外地使用筆記本電腦)隨時上網(wǎng)閱讀和處理自己在郵件服務(wù)器中的郵件。
IMAP還允許收件人只讀取郵件中的某一個部分。例如,收到了一個帶有視像附件(此文件可能很大)的郵件,而用戶使用的是無線上網(wǎng),信道的傳輸速率很低。為了節(jié)附件(此文件可能很大)的郵件,而用戶使用的是無線上網(wǎng),信道的傳輸速率很低。為了節(jié)省時間,可以先下載郵件的正文部分,待以后有時間再讀取或下載這個很大的附件。
IMAP的缺點是如果用戶沒有將郵件復(fù)制到自己的計算機上,則郵件一直存放在IMAP服務(wù)器上。要想查閱自己的郵件,必須先上網(wǎng)。
POP3與IMAP的對比

基于萬維網(wǎng)的電子郵件
從前面的圖可看出,用戶要使用電子郵件,必須在自己使用的計算機中安裝用戶代理軟件UA。如果外出到某地而又未攜帶自己的筆記本電腦,那么要使用別人的計算機進行電子郵件的收發(fā),將是非常不方便的。
現(xiàn)在這個問題解決了。在20世紀90年代中期,Hotmail推出了基于萬維網(wǎng)的電子郵件(Webmail)。今天,幾乎所有的著名網(wǎng)站以及大學(xué)或公司,都提供了萬維網(wǎng)電子郵件。常用的萬維網(wǎng)電子郵件有谷歌的Gmail,微軟的Hotmail,雅虎的Yahoo Mail。網(wǎng)易的163或126、新浪的sina等互聯(lián)網(wǎng)技術(shù)公司也都提供萬維網(wǎng)郵件服務(wù)。
萬維網(wǎng)電子郵件的好處就是:不管在什么地方(在任何一個國家的網(wǎng)吧、賓館或朋友家中),只要能夠找到上網(wǎng)的計算機,在打開任何一種瀏覽器后,就可以非常方便地收發(fā)電子郵件。使用萬維網(wǎng)電子郵件不需要在計算機中再安裝用戶代理軟件。瀏覽器本身可以向用戶提供非常友好的電子郵件界面(和原來的用戶代理提供的界面相似),使用戶在瀏覽器上就能夠很方便地撰寫和收發(fā)電子郵件。
你曾經(jīng)接收和發(fā)送過的郵件、己刪除的郵件以及你的通訊錄等內(nèi)容,都照常呈現(xiàn)在屏幕上。我們知道,用戶在瀏覽器中瀏覽各種信息時需要使用HTTP協(xié)議。因此,在瀏覽器和互聯(lián)網(wǎng)上的郵件服務(wù)器之間傳送郵件時,仍然使用HTTP協(xié)議。但是在各郵件服務(wù)器之間傳送郵件時,則仍然使用SMTP協(xié)議。
補充與思考
- 前面的知識告訴我們,有兩種不同的通信方式:“推”(push):SMTP客戶把郵件“推”給SMTP服務(wù)器?!袄保╬ull):POP3客戶把郵件從POP3服務(wù)器“拉”過來。
你可能會想到這樣的問題:如果讓郵件服務(wù)器程序就在發(fā)送方和接收方的計算機中運行,那么豈不是可以直接把郵件發(fā)送到收件人的計算機中?
——
答案是“不行”。這是因為并非所有的計算機都能運行郵件服務(wù)器程序。有些計算機可能沒有足夠的存儲空間來運行允許程序在后臺運行的操作系統(tǒng),或是可能沒有足夠的CPU能力來運行郵件服務(wù)器程序。
更重要的是,郵件服務(wù)器程序必須不間斷地運行,每天24小時都必須不間斷地連接在互聯(lián)網(wǎng)上,否則就可能使很多外面發(fā)來的郵件無法接收。
這樣看來,讓用戶的計算機運行郵件服務(wù)器程序顯然是很不現(xiàn)實的(一般用戶在不使用計算機時就將機器關(guān)閉)。讓來信暫時存儲在用戶的郵件服務(wù)器中,而當(dāng)用戶方便時就從郵件服務(wù)器的用戶信箱中讀取來信,則是一種比較合理的做法。
雖然SMTP使用TCP連接試圖使郵件的傳送可靠,但“發(fā)送成功”并不等于“收件人讀取了這個郵件”。
——
當(dāng)一個郵件傳送到接收方的郵件服務(wù)器后(即接收方的郵件服務(wù)器收下了這個郵件),再往后的情況如何,就有好幾種可能性。接收方的郵件服務(wù)器也可能接著就出了故障,使收到的郵件全部丟失(在收件人讀取信件之前)》也可能被郵件服務(wù)器的軟件當(dāng)作垃圾郵件刪除了。也可能收件人在清理自己的郵箱時,把尚未讀取的郵件一起都刪除了。有時收件人由于某種原因,很久沒有查閱自己的郵箱,根本不知道自己的郵箱中有一些來信。因此,一個郵件即使是“發(fā)送成功”,收件人也不一定會讀取到這個郵件。盡管如此,基于SMTP的電子郵件通常都被認為是可靠的。己經(jīng)廣泛使用多年的SMTP存在著一些缺點。例如,發(fā)送電子郵件不需要經(jīng)過鑒別。這就是說,在FROM命令后面的地址可以任意填寫。這就大大方便了垃圾郵件的作者,給收信人添加了麻煩。又如,SMTP本來就是為傳送ASCII碼而不是傳送二進制數(shù)據(jù)設(shè)計的。雖然后來有了MIME(Multipurpose Internet Mail Extensions)可以傳送二進制數(shù)據(jù),但在傳送非ASCII碼的長報文時,在網(wǎng)絡(luò)上的傳輸效率是不高的。此外,SMTP傳送的郵件是明文,不利于保密。
——
為了解決上述問題,2008年10月頒布的RFC 5321對SMTP進行了擴充,成為擴充的SMTP(Extended SMTP),記為ESMTP。RFC 5321在許多命令中增加了擴展的參數(shù)。新增加的功能有:客戶端的鑒別,服務(wù)器接受二進制報文,服務(wù)器接受分塊傳送的大報文,發(fā)送前先檢査報文的大小,使用安全傳輸TLS,以及使用國際化地址等。
考慮到現(xiàn)在的許多SMTP郵件服務(wù)器可能還沒有升級到ESMTP,因此特規(guī)定使用ESMTP的客戶端在準備傳送報文時,不是發(fā)送HELO而是發(fā)送EHLO報文。如果EHLO報文被對方服務(wù)器端拒絕,就表明對方仍然是一個標(biāo)準的SMTP郵件服務(wù)器(不使用擴展的參數(shù)),因而就要按照原來使用的SMTP參數(shù)進行郵件的傳送。如果EHLO報文被接受了,那么客戶端就可以使用ESMTP擴展的參數(shù)傳送報文了。有興趣的話,可以來了解下MIME與SMTP的關(guān)系。
