電子郵件因簡潔、方便,已成爲目前互聯網最成功的一種應用。互聯網上有成千上萬的郵件服務器爲用戶提供服務。每個服務器上有幾十至幾百萬個或更多的用戶郵箱,用戶通過用戶代理(如FoxMail、MS Express)收發郵件,郵件內容除通常的文字信息外,還可附加圖象、音頻、視頻等信息。
保證郵件交換正常使用的是SMTP、POP3、MIME等協議。在郵件服務器上,一般使用文件系統來存儲用戶郵件。發送的服務器和接收的郵件服務器可以不是同一臺。同一域的郵件服務器可採用分佈式結構組成服務器羣。郵件服務器還可定義郵箱別名進行轉發。
1.SMTP(簡單郵件傳輸協議)
1982年制定了SMTP(RFC 821)和郵件報文格式RFC 822。SMTP描述了兩個進程之間如何交換信息,郵件報文格式規定了郵件的具體格式。
郵件由首部和主體構成,主體部分是郵件的內容,首部由關鍵字、冒號及關鍵信息組成,典型首部如下:
Date:
From: [email protected]
To:[email protected]; [email protected]
Subject: abcdefg
BCC: [email protected]
Reply-To:
用SMTP收發郵件的過程爲:建立TCP連接(服務端口號25),傳送郵件,釋放連接。
傳送郵件的命令:
如果DATA命令被接收,接收方返回一個354 Intermediate應答,並認定以下的各行都是信件內容。當信件結尾收到並存儲後,接收者發送一個250 OK應答。因爲郵件是在傳送通道上發送,因此必須指明郵件內容結尾,以便應答對話可以重新開始。SMTP通過在最後一行僅發送一個句號來表示郵件內容的結束,在接收方,一個對用戶透明的過程將此符號過濾掉,以不影響正常的數據。
HELO <SP> <domain> <CRLF>
MAIL <SP> FROM:<reverse-path> <CRLF>
RCPT <SP> TO:<forward-path> <CRLF>
DATA <CRLF>
RSET <CRLF>
SEND <SP> FROM:<reverse-path> <CRLF>
SOML <SP> FROM:<reverse-path> <CRLF>
SAML <SP> FROM:<reverse-path> <CRLF>
VRFY <SP> <string> <CRLF>
EXPN <SP> <string> <CRLF>
HELP [<SP> <string>] <CRLF>
NOOP <CRLF>
QUIT <CRLF>
TURN <CRLF>
傳送郵件的應答:
500 格式錯誤,命令不可識別(此錯誤也包括命令行過長)
501 參數格式錯誤
502 命令不可實現
503 錯誤的命令序列
504 命令參數不可實現
211 系統狀態或系統幫助響應
214 幫助信息
220 <domain> 服務就緒
221 <domain> 服務關閉傳輸信道
421 <domain> 服務未就緒,關閉傳輸信道(當必須關閉時,此應答可以作爲對任何命令的響應)
250 要求的郵件操作完成
251 用戶非本地,將轉發向<forward-path>
450 要求的郵件操作未完成,郵箱不可用(例如,郵箱忙)
550 要求的郵件操作未完成,郵箱不可用(例如,郵箱未找到,或不可訪問)
451 放棄要求的操作;處理過程中出錯
551 用戶非本地,請嘗試<forward-path>
452 系統存儲不足,要求的操作未執行
552 過量的存儲分配,要求的操作未執行
553 郵箱名不可用,要求的操作未執行(例如郵箱格式錯誤)
354 開始郵件輸入,以<CRLF>.<CRLF>結束
554 操作失敗
例子:
R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
S: HELO USC-ISIF.ARPA
R: 250 BBN-UNIX.ARPA
S: MAIL FROM:<[email protected]>
R: 250 OK
S: RCPT TO:<[email protected]>
R: 250 OK
S: RCPT TO:<[email protected]>
R: 550 No such user here
S: RCPT TO:<[email protected]>
R: 250 OK
S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF>
S: Blah blah blah...
S: ...etc. etc. etc.
S: .
R: 250 OK
S: QUIT
R: 221 BBN-UNIX.ARPA Service closing transmission channel
2.POP3(郵局協議)
1984年制定了POP(RFC 918),以後完善爲POP3(RFC 1939)。用取郵件的過程爲:建立TCP連接(服務端口號110),取郵件,釋放連接。命令與應答類似於SMTP。見下表:
命令格式
參數
響應
USER name
指定郵箱的字符串,這對服務器至關重要
+OK:有效郵箱;
-ERR:無效郵箱
PASS string
口令
+OK:郵件鎖住並已經準備好;
-ERR無效口令或無法鎖住郵件
(因爲此命令只有一個參數,因此空格不再作爲分隔符,而作爲口令的一部分)
STAT
(無)
“確認”響應,空格,以八進制表示的郵件數目,空格和郵件大小。
LIST [msg]
信件數目(可選),如果出現,不包括標記爲刪除的信件。
如果給出了參數,且POP3服務器返回包括上述信息的“確認”,此行稱爲信息的“掃描表”。
如果沒有參數,服務器返回“確認”響應,此響應便以多行給出。在初始的+OK後,對於每個信件,服務器均給出相應的響應。
RETR msg
如果服務器返回“確認”,給出的響應是多行的。在初始的+OK後,服務器發送與給定信息號對應的信息,對於多行響應,注意字節填充終止符。
DELE msg
服務器將此信件標記爲刪除,以後任何關於此信件的操作就會產生錯誤。
NOOP
(無)
服務器僅返回“確認”。
RSET
(無)
所有被標記爲刪除的信件復位,服務器返回“確認”。
QUIT
(無)
服務器刪除所有標記爲刪除的信件,然後釋放排它鎖,並返回這些操作的狀態碼。最後TCP連接被中斷。
TOP msg n
一個是未被標記爲刪除的信件數,另一個是非負數(必須提供)
如果服務器返回“確認”,響應是多行的。在初始的+OK後,服務器發送信件頭,一個空行將信件頭和信件體分開,對於多行響應要注意字節填充終止符。
注意:如果客戶要求的行數比信件體中的行數大,服務器會發送整個信件。
UIDL [msg]
信件數(可選)。
如果給出了參數,且POP3服務器返回包括上述信息的“確認”,此行稱爲信息的“獨立-ID表”。
如果沒有參數,服務器返回“確認”響應,此響應便以多行給出。在初的+OK後,對於每個信件,服務器均給出相應的響應。
APOP name digest
指定郵箱的字串和MD5算法生成的密碼串。
USER/PASS存在泄密的可能性。
實現APOP命令的服務器包括一個標記確認的時間戳。例如:在UNIX上使用APOP命令的語法爲:process-ID.clock@hostname,其中進程-ID是進程的十進制的數,時鐘是系統時鐘的十進制表示,主機名與POP3服務器名一致。客戶記錄下此時間戳,然後以送APOP命令。
例子:
S: <等待連接到TCP端口110>
C: <打開連接>
S: +OK POP3 server ready <[email protected]>
C: APOP mrose c4c9334bac560ecc979e58001b3e22fb
S: +OK mrose's maildrop has 2 messages (320 octets)
C: STAT
S: +OK 2 320
C: LIST
S: +OK 2 messages (320 octets)
S: 1 120
S: 2 200
S: .
C: RETR 1
S: +OK 120 octets
S: <服務器發送信件1>
S: .
C: DELE 1
S: +OK message 1 deleted
C: RETR 2
S: +OK 200 octets
S: <服務器發送信件2>
S: .
C: DELE 2
S: +OK message 2 deleted
C: QUIT
S: +OK dewey POP3 server signing off (maildrop empty)
C: <關閉連接>
3.MIME(通用因特網郵件擴充協議)
1993年制定了RFC1521,1522。後增加了RFC 2045,2046。
MIME在原來 RFC 822定義的信頭的基礎上新增了一些信頭,用於讓接收方瞭解正文的結構。 RFC 2045描述了MIME,正文內容仍然可以使用ASCII文本行。另一方面,MIME爲非 ASCII報文定義了幾種編碼規則。以下所示爲一 MIME郵件的信頭,可以看出,除了原 RFC 822定義的信頭外,還含有MIME新增加的信頭:Mime Version、Content Type、Content Transfer En-coding、Content Disposition。
Return Path:〈[email protected]〉
Received:from i575.cs.ecnu.edu.cn by cs.ecnu.
edu. cn(4. 1 / SMI 4. 1 )
id AA0 6 1 1 5;Mon,1 7Aug981 6∶ 3 7∶ 1 1 CDT
Message Id:〈3 5D7CEA8. 1 CB1 @ cs. ecnu. edu. cn〉
Date:Mon,1 7Aug1 9981 5∶ 3 3∶ 1 2 +0 90 0
From:ajfan〈ajfan@ cs. ecnu. edu. cn〉
Reply To:ajfan@ cs. ecnu. edu. cn
X Mailer:Mozilla 3 . 0 (Win95;I)
Mime Version:1 . 0
To:aifan@ cs. ecnu. edu. cn
Subject:paper
Content Type:application/ octet stream;name=″
Email3 . doc″
Content Transfer Encoding:base6 4
Content Disposition:attachment;filename=″
Email3 . doc“
MIME把五個新的頭域增加入 Internet E-mail報文中,即MIME Version、Con-tent Type、Content Transfer Encoding、Content ID和 Content Descripton。MIME Version(MIME版本 )規定了代理所支持的 MIME版本。通過識別用於產生報文的 MIME版本,MIME Version域可以防止用戶使用不兼容的 MIME版本誤譯 MIME報文。
Content Type規定了報文體的類型,RFC 2045定義了7種類型:Text,Applica-tion、Image、Audio、Video、Message和Multipart,其中Message和Multipart爲複合類型,其餘爲簡單類型,每種類型都有一個或多個子類型,類型與子類型中間以斜杆“/”分隔。 RFC 2046對各種類型作了詳細規定。此外,MIME還允許擴展定義新的內容類型。
Content Transfer Encoding指出正文在傳輸過程中使用的編碼。NVT ASCII是 Internet E mail 報文的缺省格式。
Content ID和Content Description頭域是可選的。用戶代理可用 Content ID值識別 MIME入口。
Content Description允許用戶增加關於報文體內容的說明性信息。
MIME定義了 7種主要報文類型:
Text類型指一般普通文本。Text/ Richtext允許報文體中出現簡單基於 SGML的標誌語言。Image類型用於傳送靜態圖片 ,GIF和JPEG是兩種存儲格式不同的子類型。Audio和 Video類型用於傳送聲音和動態圖片。Video僅包含視頻信息而沒有聲音 ,如果要傳送一段包含聲音的視頻信息 ,則視頻信息和聲音要分開傳送。Application類型要求在顯示前獲得外部處理,用戶代理收到 Application/ Octet-stream類型的報文時先將其複製到一個文件中去 ,文件名可由用戶決定 ,然後作進一步處理。對 Postscript子類型的報文 ,接收方只要執行其中的附錄程序就可顯示到來報文。Message類型允許在一個報文中嵌入另一報文 ,常用於郵件轉交。
MIME的編碼方案有Q方法和Base64方法。
(1) Q方法
可打印的內容傳輸編碼爲少量的8位數據作爲7位NVT ASCII傳輸提供了簡單而有效的編碼方法。要使用可打印編碼,以將任何具有第八位設置的字符當作一個三位字符串來傳輸。這三位字符串通常以等號開頭(=)。緊接着等號的是兩位數字的十六進制(表示兩個 ASCII字符),它表示被編碼字符的ASCII值。例如JAMSA中的字符可編碼如下:
=4A=41 =4D=53=41
“J”ASCII碼是0x4A。“A”的ASCII十六進制是0x41等等。可打印編碼把每個字符都轉換成ASCII字符。例如在字母 J(ASCII 0x4A)的情況下,編碼方案傳輸三個字節:一個等號(ASCII 0x3D),一個是數字4(ASCII 0x34),一個是字母A(ASCII 0x41)。可打印編碼儘管使用簡單,但編碼是原數據的3倍。因此,可打印編碼只對大量7位數據有益。
(2) BASE64
BASE64編碼僅增加三分之一的報文大小,這是一種64個ASCII字符的編碼方法,這64個字符分別是“A”~“Z”,“a”~“z”,“0”~“9”以及“+”和“/”。編碼時,把每個連續的三個字節(24位)數據組合表示爲四個六位數值(總共24位),每6位數值當作一個 ASCII字符來傳輸,其6位碼值對應0~63。當數據不包含三字節數據塊的整數倍時,這種編碼方案使用等號填充數據。
4.其它
CCITT制定了功能很強的MHS標準,即X.400,但未得到廣泛應用。另還有商家開發了自己獨立的郵件系統,如微軟的Exchange、NetWare的GroupWise等,這些系統可與Internet郵件系統交換信息,內部實現上各有特色。若需瞭解,可查閱相關資料。