?? rfc1939(c).txt
字號:
組織:中國互動出版網(wǎng)(http://www.china-pub.com/)
RFC文檔中文翻譯計劃(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
譯者:顧國飛(ggfei ggfei@263.net)
譯文發(fā)布時間:2001-4-10
版權(quán):本中文翻譯文檔版權(quán)歸中國互動出版網(wǎng)所有。可以用于非商業(yè)用途自由轉(zhuǎn)載,但必須保留本文檔的翻譯及版權(quán)信息。
Network Working Group J. Myers
Request for Comments: 1939 Carnegie Mellon
STD: 53 M. Rose
Obsoletes: 1725 Dover Beach Consulting, Inc.
Category: Standards Track May 1996
RFC1939-POP3協(xié)議
(RFC1939 Post Office Protocol - Version 3)
本備忘錄狀態(tài)
This memo provides information for the Internet community. It does
not specify an Internet standard of any kind. Distribution of this
memo is unlimited.
目錄
1. 簡介 2
2. 簡單說明 2
3. 基本操作 3
4. "確認"狀態(tài) 3
5. "操作"狀態(tài) 5
6."更新"狀態(tài) 5
7.可選的POP3命令 5
8. POP3命令總結(jié) 7
9. POP3會話實例 8
10. 消息格式 9
11. 安全性考慮 9
12. 參考資料 9
14. 致謝 9
15. 作者地址 10
APPENDIX A. DIFFERENCES FROM RFC 1725 10
APPENDIX B. COMMAND INDEX 11
1. 簡介
對于在網(wǎng)絡上的比較小的結(jié)點,支持消息傳輸系統(tǒng)(MTS)是不實際的。例如,一臺工作站可能不具有充足的資源允許SMTP服務器和相當?shù)谋镜剜]件傳送系統(tǒng)保持序駐留,并持續(xù)運行。同樣的,將一臺個人計算機長時間連接在IP類型網(wǎng)絡上的費用也是可觀的(結(jié)點缺少的資源被稱為"聯(lián)絡性")。
雖然如此,在這樣的小結(jié)點上允許管理郵件是十分有用的,并且這些結(jié)點經(jīng)常支持一個用戶代理來管理郵件。為解決這一問題,能夠支持MTS的結(jié)點就為這些不能支持的結(jié)點提供了郵件存儲功能。郵局協(xié)議-版本3就是使這樣的工作站可以用一種比較實用的方法來訪問存儲于服務器上的儲存郵件。通常,這意味著工作站可以從服務器上取得郵件,而服務器為它暫時保存郵件。
在下文中,客戶主機指的是利用POP3服務的主機,而服務器主機指的是提供POP3服務的主機。
2. 簡單說明
在此文檔中不指明客戶主機如何將郵件送入到傳送系統(tǒng)中去。但這里有一個說明:當用戶代理需要將信息送到傳送系統(tǒng)時,它在接力主機上建立SMTP連接(這些接力主機可以是POP3主機,也可以不是)。
3. 基本操作
初始時,服務器通過偵聽TCP端口110開始POP3服務。當客戶主機需要使用服務時,它將與服務器主機建立TCP連接。當連接建立后,POP3發(fā)送確認消息。客戶和POP3服務器相互(分別)交換命令和響應,這一過程一直要持續(xù)到連接終止。
POP3命令由一個命令和一些參數(shù)組成。所有命令以一個CRLF對結(jié)束。命令和參數(shù)由可打印的ASCII字符組成,它們之間由空格間隔。命令一般是三到四個字母,每個參數(shù)卻可達40個字符長。
POP3響應由一個狀態(tài)碼和一個可能跟有附加信息的命令組成。所有響應也是由CRLF對結(jié)束。現(xiàn)在有兩種狀態(tài)碼,"確定" ("+OK")和"失敗" ("-ERR")。
對于特定命令的響應是由許多字符組成的。在這些情況中,下面一一表述:在發(fā)送第一行響應和一個CRLF之后,任何的附加信息行發(fā)送,他們也由CRLF對結(jié)束。當所有信息發(fā)送結(jié)束時,發(fā)送最后一行,包括一個結(jié)束字符(十進制碼46,也就是".")和一個CRLF對。如果信息中的任何一行以結(jié)束字符開始,此行就是通過在那一行預先裝入結(jié)束而進行字符填充的。因此,多行響應由五個CRLF.CRLF 結(jié)束。當檢測多行響應時,客戶檢測以確認此行是否以結(jié)束字符開始。如果是的,而且其后的字符不是CRLF,此行的第一個字符(結(jié)束字符)將被拋棄;如果其后緊跟CRLF,從POP服務器來的響應終止,包括.CRLF 的行也不被認為是多行響應的一部分了。
在生命周期中,POP3會話有幾個不同的狀態(tài)。一旦TCP連接被打開,而且POP3服務器發(fā)送了確認信息,此過程就進入了"確認"狀態(tài)。在此狀態(tài)中,客戶必須向POP3服務器確認自己是其的客戶。一旦確認成功,服務器就獲取與客戶郵件相關的資源,此時這一過程進入了"操作"狀態(tài)。在此狀態(tài)中,客戶提出服務,當客戶發(fā)出QUIT命令時,此過程進入了"更新"狀態(tài)。在此狀態(tài)中,POP3服務器釋放在"操作"狀態(tài)中取得的資源,并發(fā)送消息,終止連接。
POP3服務器可以擁有一個自動退出登錄的記時器。此記時器必須至少可以記錄10分鐘。這樣從客戶發(fā)送的消息才可能刷新此記時器。當記時器失效時,POP3會話并不進入"更新"狀態(tài),而是關閉TCP連接,而且不刪除任何消息,不向客戶發(fā)送任何響應。
4. "確認"狀態(tài)
一時TCP連接由POP3客戶打開,POP3服務器發(fā)送一個單行的確認。這個消息可以是由CRLF結(jié)束的任何字符。例如,它可以是:
S: +OK POP3 server ready
注意:這個消息是一個POP3應答。POP3服務器應該給出一個"確定"響應作為確認。
此時POP3會話就進入了"確認"狀態(tài)。此時,客戶必須向服務器證明它的身份。在文檔中介紹兩種可能的處理機制,一種是USER和PASS命令,另一種是在后面要介紹的APOP命令。
用USER和PASS命令進行確認過程,客戶必須首先發(fā)送USER命令,如果POP3服務器以"確認"狀態(tài)碼響應,客戶就可以發(fā)送PASS命令以完成確認,或者發(fā)送QUIT命令終止POP3會話。如果POP3服務器返回"失敗"狀態(tài)碼,客戶可以再發(fā)送確認命令,或者發(fā)送QUIT命令。
當客戶發(fā)送了PASS命令后,服務器根據(jù)USER和PASS命令的附加信息決定是否允許訪問相應的存儲郵件。
一旦服務器通過這些數(shù)據(jù)決定允許客戶訪問儲存郵件,服務器會在郵件上加上排它鎖,以防止在進入"更新"狀態(tài)前對郵件的改變。如果成功獲得了排它鎖,服務器返回一個"確認"狀態(tài)碼。會話進入"操作狀態(tài)",同時沒有任何郵件被標記為刪除。如果郵件因為某種原因不能打開(例如,排它鎖不能獲得,客戶不能訪問相應的郵件或者郵件不能進行語法分析),服務器將返回"失敗"狀態(tài)碼。在返回"失敗"狀態(tài)碼后,服務器會關閉連接。如果服務器沒有關閉連接,客戶可以重新發(fā)送確認命令,重新開始,或者發(fā)送QUIT命令。
在服務器打開郵件后,它為每個消息指定一個消息號,并以八進制表示每個消息的長度。第一個消息被指定為1,第二個消息被指定為2,以此類推,第N個消息被指定為N。在POP3命令和響應中,所以的消息號和長度以十進制表示。
下面是對上述三條命令的總結(jié):
5. "操作"狀態(tài)
一旦客戶向服務器成功地確認了自己的身份,服務器將鎖住并打開相應的郵件,這時POP3會話進入"操作"狀態(tài)。現(xiàn)在客戶可以重復下面的POP3命令,對于每個命令服務器都會返回應答。最后,客戶發(fā)送QUIT命令,會話進入"更新"狀態(tài)。
下面是在"操作"狀態(tài)中可用的命令:
6."更新"狀態(tài)
當客戶在"操作"狀態(tài)下發(fā)送QUIT命令后,會話進入"更新"狀態(tài)。(注意:如果客戶在"確認"狀態(tài)下發(fā)送QUIT后,會話并不進入"更新"狀態(tài)。)
如果會話因為QUIT命令以外的原因中斷,會話并不進入"更新"狀態(tài),也不從服務器中刪除任何信件。
7.可選的POP3命令
以上討論的命令是對POP3服務的最小實現(xiàn)。以下說明的可選命令允許客戶更方便地處理信件,這是一個比較一般的POP3服務實現(xiàn)。
· TOP msg n
【參數(shù)】一個是未被標記為刪除的信件數(shù),另一個是非負數(shù)(必須提供)
【限制】僅在"操作"狀態(tài)下使用。
【說明】
如果服務器返回"確認",響應是多行的。在初始的+OK后,服務器發(fā)送信件頭,一個空行將信件頭和信件體分開,對于多行響應要注意字節(jié)填充終止符。
注意:如果客戶要求的行數(shù)比信件體中的行數(shù)大,服務器會發(fā)送整個信件。
【響應】+OK:其后有信件頭;
-ERR:其后無類似消息。
【例子】
C: TOP 1 10
S: +OK
S: <服務器發(fā)送消息頭,一個空行和信件的頭10行>
S: .
...
C: TOP 100 3
S: -ERR no such message
· UIDL [msg]
【參數(shù)】信件數(shù)(可選)。如果給出信件數(shù),不包括被標記為刪除的信件。
【限制】僅在"操作"狀態(tài)下使用。
【說明】
如果給出了參數(shù),且POP3服務器返回包括上述信息的"確認",此行稱為信息的"獨立-ID表"。
如果沒有參數(shù),服務器返回"確認"響應,此響應便以多行給出。在初的+OK后,對于每個信件,服務器均給出相應的響應。此行叫做信件的"獨立-ID表"。
為簡化語法分析,所有服務器要求使用獨立-ID表的特定格式。它包括空格和信件的獨立-ID。
信件的獨立-ID由0x21到0x7E字符組成,這個符號在給定的存儲郵件中不會重復。
注意:信件不包括被標記為刪除的信件。
【響應】+OK:其后是獨立-ID表;
-ERR:其后無類似信件。
【例子】
C: UIDL
S: +OK
S: 1 whqtswO00WBw418f9t5JxYwZ
S: 2 QhdPYR:00WBw1Ph7x7
S: .
...
C: UIDL 2
S: +OK 2 QhdPYR:00WBw1Ph7x7
...
C: UIDL 3
S: -ERR no such message, only 2 messages in maildrop
· APOP name digest
【參數(shù)】指定郵箱的字串和MD5摘要串。
【限制】僅在POP3確認后的"確認"狀態(tài)中使用。
【說明】通常,每個POP3會話均以USER/PASS互換開始。這導致了用戶名和口令在網(wǎng)絡上的顯式傳送,這不會造成什么危險。但是,許多客戶經(jīng)常連接到服務檢查信件。通常間隔時間比較短,這就加大了泄密的可能性。
另一種提供"確認"過程的方法是使用APOP命令。
實現(xiàn)APOP命令的服務器包括一個標記確認的時間戳。例如:在UNIX上使用APOP命令的語法為:process-ID.clock@hostname,其中進程-ID是進程的十進制的數(shù),時鐘是系統(tǒng)時鐘的十進制表示,主機名與POP3服務器名一致。
客戶記錄下此時間戳,然后以送APOP命令。name語法和USER命令一致。Digest是采用MD5算法產(chǎn)生的包括時間戳和共享密鑰的字串。此密鑰是客戶和服務器共知的,應該注意保護此密鑰,如果泄密,任何人都能夠以用戶身份進入服務器。
如果服務器接到APOP命令,它驗證digest,如果正確,服務器返回"確認",進入"操作"狀態(tài);否則,給出"失敗"并停留在"確認"狀態(tài)。
注意:共享密鑰的長度增加,解讀它的難度也相應增加,這個密鑰應該是長字符串。
【響應】+OK:郵件鎖住并準備好;
-ERR:拒絕請求。
【例子】
S: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>
C: APOP mrose c4c9334bac560ecc979e58001b3e22fb
S: +OK maildrop has 1 message (369 octets)
在此例子中,共享密鑰 <1896.697170952@dbc.mtview.ca.us>tanstaaf由MD5算法生成,它產(chǎn)生了digest值, c4c9334bac560ecc979e58001b3e22fb
8. POP3命令總結(jié)
基礎的POP3命令:
USER name 在"確認"狀態(tài)有效
PASS string
QUIT
STAT 在"操作"狀態(tài)有效
LIST [msg]
RETR msg
DELE msg
NOOP
RSET
QUIT 在"更新"狀態(tài)有效
可選的POP3命令:
APOP name digest 在"確認"狀態(tài)有效
TOP msg n 在"操作"狀態(tài)有效
UIDL [msg]
POP3 響應:
+OK
-ERR
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -