1.用戶代理(user agent)web
2.郵件服務器(mail server)瀏覽器
3.簡單郵件傳輸協議(simple mail transfer protocol,SMTP)服務器
郵件服務器造成了電子郵件系統的核心。網絡
郵箱(mailbox)是郵件服務器爲用戶單獨開闢的一個空間。tcp
郵件發送過程能夠描述爲:ui
報文從發送方的用戶代理開始,傳輸到到發送方的郵件服務器。再由發送方的郵件服務器傳輸到接受方的郵件服務器。最後由接受方的郵件服務器分發到接受方的郵箱(mailbox)中。編碼
報文隊列:若是接受方的郵件服務器故障,那麼發送方的郵件服務器會將要發送的報文存儲在一個報文隊列(massage queue)中,並在之後嘗試發送。一般每30分鐘左右就進行一次嘗試。若是幾天後仍然不能成功,服務器就刪除該報文並以電子郵件的形式通知發送方。代理
smtp:在一個郵件服務器上同時運行着smtp的客戶端和smtp的服務端。發送郵件時,smtp客戶端起做用,接受郵件時smtp起做用。視頻
1.smtp的一個小的歷史缺憾:server
smtp限制全部郵件報文的體部分(不僅是其首部)只能採用簡單的7比特ASCII表示。在20世紀80年代早期,這種限制是明智的,由於當時傳輸能力不足,沒有人會經過電子郵件發送大的附件或是大的圖片、聲音或者視頻文件。然而,在今天的多媒體時代,7位ASCII的限制的確有點痛苦,即在用SMTP傳送郵件以前,須要將二進制多媒體數據編碼爲ASCII碼,而且在使用SMTP傳輸後要求將相應的ASCII碼郵件解碼還原爲多媒體數據。
使用HTTP傳送就不須要將多媒體數據編碼爲ASCII碼。
2.郵件發送(ASCII報文)
假設Alice想給Bob發送一封簡單的ASCII報文:
SMTP通常不使用中間郵件服務器發送郵件。即發送方郵件服務器和接收方郵件服務器是直接鏈接的(TCP 25端口)。
一旦建立了TCP鏈接,就開始了以下過程:
s:220 hamburger.edu //表示鏈接郵件服務器成功
C:HELO crepes.fr //驗證服務器 向服務器問好
C:MAIL FROM:<alice@crepes.fr> //驗證發件人郵箱地址
C:RCPT TO:<bob@hamburger.edu> //驗證接收人地址
C:DATA //開始寫郵件了
C:Do you like ketchup? //郵件內容
C: How about pickles? //郵件內容
C:. //CRLF.CRLF 表示報文結束 。CR和LF分別表示回車和換行。第一個CRLF是上一行末尾的回車和換行。
C: QUIT //斷開鏈接
相同:
1.兩個協議都是用於一臺主機箱另外一臺主機傳送文件。http是在web服務器向web客戶(一般是一個瀏覽器)傳送文件,smtp是在兩個郵件服務器之間傳送文件。
2.smtp和持續的http都是持續鏈接(長鏈接)。
區別:
1.http是一個拉協議(pull protocol),即用戶使用http從服務器拉去這些信息。smtp是一個推協議(push protocol),即發送郵件服務器將文件推向接收郵件服務器。特別是,這個TCP鏈接是由要發送該文件的機器發起的。
2.smtp要求每一個報文(包括他們的體)使用7比特ASCII碼格式。如某報文包含了非7比特ASCII字符或二進制數據(如圖形文件),則該報文必須按照7比特ASCII碼進行編碼。而http數據則不受這種限制。
3.對於如何處理既包含文本圖形的文檔。http把每一個對象(多個文件對象)封裝到它本身的http響應報文中,而smtp則把全部報文對象(多個報文)放在一個報文之中。
MIME協議( Multipurpose Internet Mail Extensions ),通用因特網郵件擴充協議 ,做爲SMTP的一種輔助協議,其引入是爲了克服SMTP的以下不足:
1.SMTP只能發送使用NVT( 虛擬網絡終端 ) 7位ASCII碼格式的報文,它不能使用NVT 7位ASCII碼不支持的語言(如漢語,日語,德語等)。
2.SMTP不能傳送可執行文件或其餘二進制對象(如圖像文件,這裏的不能傳送應該指的是接受方並不能肯定接受數據的準確性和完整性)。
3.SMTP不支持音頻或視頻文件。
4.SMTP發送的郵件的長度受到限制。
爲了克服以上的不足,便引入了MIME協議,MIME協議是一種擴展協議性的輔助協議,「擴充」指的是隻是對原來協議的擴展,而不是取代。它容許非ASCII碼數據可以經過電子郵件傳送。MIME在發送方把非ASCII碼數據轉換爲NVT ASCII數據,以後的工做再交給SMTP完成,在接收方再將NVT ASCII數據還原成原來的數據。MIME的體系結構以下:
MIME版本 :定義了MIME使用的版本。
內容-類型 :定義報文主體使用的數據類型和子類型,用<數據類型/子類型>表示。
內容-傳送-編碼 :定義了郵件的主體在傳送時是如何編碼的。
內容-標識 :在多報文的環境中惟一地標識報文。
內容描述 :定義了主體是否爲圖像、音頻或視頻。
1Date: Thu, 18 Apr 2002 09:32:45 +0800 //首部行
2From: <bhw98@sina.com> //首部
3 To:<bhwang@jlonline.com> //首部
4Subject: Test //首部
5 Mime-Version: 1.0 //首部
6 Content-Type: text/plain;charset="iso-8859-1" //首部
7 //空行
8 Thisis a simple mail. //報文體
pop3是一個極爲簡單的郵件訪問協議(pull protocol),由RFC1939進行定義。用戶代理(客戶)打開一個到郵件服務器端口110上的tcp鏈接。
pop3按照三個階段:
特許(authorization)-->用戶代理以明文形式發送用戶名和密碼以鑑別用戶。
client: telnet mailserver 110 //與郵件服務器110端口創建tcp鏈接
server: +OK server ready //郵件服務器響應
client: user bob //用戶名 bob
server: +OK
client: pass password //密碼
server:+OK user successfully logged on
事務處理:
此階段,用戶代理從郵件服務器取回郵件報文(此階段用戶代理還能對郵件報文作刪除標記和取消刪除標記,以及獲取郵件的統計信息)
c:list
s: 1 498 //報文1長度
s:2 912 //報文2長度
c:retr 1
s: (bla bla bla..............) //報文1
c: dele 2 //對報文2進行刪除標記
c:quit
s:+OK POP3 server singing off //退出後,郵件服務器會刪除郵件報文2
結束:
quit命令後,結束該pop3會話。
pop3協議沒有給用戶提供任何建立遠程文件夾併爲報文指派文件夾的方法。這會給那些移動用戶帶來不方便。
IMAP解決了此問題。IMAP服務器把每一個報文與一個文件夾聯繫起來;報文第一次到達服務器時,它與收件人的inbox文件夾相關聯。
IMAP的另外一個重要特性時它具備容許用戶代理獲取報文組件的命令。例如,一個用戶代理能夠只讀取一個報文的報文首部,或者只是一個多部分報文的一部分。當使用低寬帶鏈接時,用戶可能並不想取回他郵箱中的全部郵件,尤爲要避免可能包含如音頻或視頻片斷的大郵件。
今天愈來愈多的用戶使用web瀏覽器收發電子郵件。用戶代理(無論時發送方仍是接受方)與郵件服務器之間都是經過http進行通訊,可是郵件服務器之間發送和收發郵件時仍然使用的時SMTP。