明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

RFC1939-POP3協(xié)議中文版

[摘要]1. 簡(jiǎn)介  對(duì)于在網(wǎng)絡(luò)上的比較小的結(jié)點(diǎn),支持消息傳輸系統(tǒng)(MTS)是不實(shí)際的。例如,一臺(tái)工作站可能不具有充足的資源允許SMTP服務(wù)器和相當(dāng)?shù)谋镜剜]件傳送系統(tǒng)保持序駐留,并持續(xù)運(yùn)行。同樣的,將一臺(tái)個(gè)人計(jì)算機(jī)長(zhǎng)時(shí)間連接在IP類(lèi)型網(wǎng)絡(luò)上的費(fèi)用也是可觀(guān)的(結(jié)點(diǎn)缺少的資源被稱(chēng)為"聯(lián)絡(luò)性"...
1. 簡(jiǎn)介
  對(duì)于在網(wǎng)絡(luò)上的比較小的結(jié)點(diǎn),支持消息傳輸系統(tǒng)(MTS)是不實(shí)際
的。例如,一臺(tái)工作站可能不具有充足的資源允許SMTP服務(wù)器和相當(dāng)?shù)谋镜剜]件傳送系統(tǒng)保持序駐留,并持續(xù)運(yùn)行。同樣的,將一臺(tái)個(gè)人計(jì)算機(jī)長(zhǎng)時(shí)間連接在IP類(lèi)型網(wǎng)絡(luò)上的費(fèi)用也是可觀(guān)的(結(jié)點(diǎn)缺少的資源被稱(chēng)為"聯(lián)絡(luò)性")。
  雖然如此,在這樣的小結(jié)點(diǎn)上允許管理郵件是十分有用的,并且這些結(jié)點(diǎn)經(jīng)常支持一個(gè)用戶(hù)代理來(lái)管理郵件。為解決這一問(wèn)題,能夠支持MTS的結(jié)點(diǎn)就為這些不能支持的結(jié)點(diǎn)提供了郵件存儲(chǔ)功能。郵局協(xié)議-版本3就是使這樣的工作站可以用一種比較實(shí)用的方法來(lái)訪(fǎng)問(wèn)存儲(chǔ)于服務(wù)器上的儲(chǔ)存郵件。通常,這意味著工作站可以從服務(wù)器上取得郵件,而服務(wù)器為它暫時(shí)保存郵件。
  在下文中,客戶(hù)主機(jī)指的是利用POP3服務(wù)的主機(jī),而服務(wù)器主機(jī)指的是提供POP3服務(wù)的主機(jī)。

2. 簡(jiǎn)單說(shuō)明

  在此文檔中不指明客戶(hù)主機(jī)如何將郵件送入到傳送系統(tǒng)中去。但這里有一個(gè)說(shuō)明:當(dāng)用戶(hù)代理需要將信息送到傳送系統(tǒng)時(shí),它在接力主機(jī)上建立SMTP連接(這些接力主機(jī)可以是POP3主機(jī),也可以不是)。
 
3. 基本操作

  初始時(shí),服務(wù)器通過(guò)偵聽(tīng)TCP端口110開(kāi)始POP3服務(wù)。當(dāng)客戶(hù)主機(jī)需要使用服務(wù)時(shí),它將與服務(wù)器主機(jī)建立TCP連接。當(dāng)連接建立后,POP3發(fā)送確認(rèn)消息?蛻(hù)和POP3服務(wù)器相互(分別)交換命令和響應(yīng),這一過(guò)程一直要持續(xù)到連接終止。
  POP3命令由一個(gè)命令和一些參數(shù)組成。所有命令以一個(gè)CRLF對(duì)結(jié)束。命令和參數(shù)由可打印的ASCII字符組成,它們之間由空格間隔。命令一般是三到四個(gè)字母,每個(gè)參數(shù)卻可達(dá)40個(gè)字符長(zhǎng)。
  POP3響應(yīng)由一個(gè)狀態(tài)碼和一個(gè)可能跟有附加信息的命令組成。所有響應(yīng)也是由CRLF對(duì)結(jié)束,F(xiàn)在有兩種狀態(tài)碼,"確定" ("+OK")和"失敗" ("-ERR")。
  對(duì)于特定命令的響應(yīng)是由許多字符組成的。在這些情況中,下面一一表述:在發(fā)送第一行響應(yīng)和一個(gè)CRLF之后,任何的附加信息行發(fā)送,他們也由CRLF對(duì)結(jié)束。當(dāng)所有信息發(fā)送結(jié)束時(shí),發(fā)送最后一行,包括一個(gè)結(jié)束字符(十進(jìn)制碼46,也就是".")和一個(gè)CRLF對(duì)。如果信息中的任何一行以結(jié)束字符開(kāi)始,此行就是通過(guò)在那一行預(yù)先裝入結(jié)束而進(jìn)行字符填充的。因此,多行響應(yīng)由五個(gè)CRLF.CRLF 結(jié)束。當(dāng)檢測(cè)多行響應(yīng)時(shí),客戶(hù)檢測(cè)以確認(rèn)此行是否以結(jié)束字符開(kāi)始。如果是的,而且其后的字符不是CRLF,此行的第一個(gè)字符(結(jié)束字符)將被拋棄;如果其后緊跟CRLF,從POP服務(wù)器來(lái)的響應(yīng)終止,包括.CRLF 的行也不被認(rèn)為是多行響應(yīng)的一部分了。
  在生命周期中,POP3會(huì)話(huà)有幾個(gè)不同的狀態(tài)。一旦TCP連接被打開(kāi),而且POP3服務(wù)器發(fā)送了確認(rèn)信息,此過(guò)程就進(jìn)入了"確認(rèn)"狀態(tài)。在此狀態(tài)中,客戶(hù)必須向POP3服務(wù)器確認(rèn)自己是其的客戶(hù)。一旦確認(rèn)成功,服務(wù)器就獲取與客戶(hù)郵件相關(guān)的資源,此時(shí)這一過(guò)程進(jìn)入了"操作"狀態(tài)。在此狀態(tài)中,客戶(hù)提出服務(wù),當(dāng)客戶(hù)發(fā)出QUIT命令時(shí),此過(guò)程進(jìn)入了"更新"狀態(tài)。在此狀態(tài)中,POP3服務(wù)器釋放在"操作"狀態(tài)中取得的資源,并發(fā)送消息,終止連接。
  POP3服務(wù)器可以擁有一個(gè)自動(dòng)退出登錄的記時(shí)器。此記時(shí)器必須至少可以記錄10分鐘。這樣從客戶(hù)發(fā)送的消息才可能刷新此記時(shí)器。當(dāng)記時(shí)器失效時(shí),POP3會(huì)話(huà)并不進(jìn)入"更新"狀態(tài),而是關(guān)閉TCP連接,而且不刪除任何消息,不向客戶(hù)發(fā)送任何響應(yīng)。
 
4. "確認(rèn)"狀態(tài)

  一時(shí)TCP連接由POP3客戶(hù)打開(kāi),POP3服務(wù)器發(fā)送一個(gè)單行的確認(rèn)。這個(gè)消息可以是由CRLF結(jié)束的任何字符。例如,它可以是:
    S: +OK POP3 server ready
  注意:這個(gè)消息是一個(gè)POP3應(yīng)答。POP3服務(wù)器應(yīng)該給出一個(gè)"確定"響應(yīng)作為確認(rèn)。
  此時(shí)POP3會(huì)話(huà)就進(jìn)入了"確認(rèn)"狀態(tài)。此時(shí),客戶(hù)必須向服務(wù)器證明它的身份。在文檔中介紹兩種可能的處理機(jī)制,一種是USER和PASS命令,另一種是在后面要介紹的APOP命令。
  用USER和PASS命令進(jìn)行確認(rèn)過(guò)程,客戶(hù)必須首先發(fā)送USER命令,如果POP3服務(wù)器以"確認(rèn)"狀態(tài)碼響應(yīng),客戶(hù)就可以發(fā)送PASS命令以完成確認(rèn),或者發(fā)送QUIT命令終止POP3會(huì)話(huà)。如果POP3服務(wù)器返回"失敗"狀態(tài)碼,客戶(hù)可以再發(fā)送確認(rèn)命令,或者發(fā)送QUIT命令。
  當(dāng)客戶(hù)發(fā)送了PASS命令后,服務(wù)器根據(jù)USER和PASS命令的附加信息決定是否允許訪(fǎng)問(wèn)相應(yīng)的存儲(chǔ)郵件。
  一旦服務(wù)器通過(guò)這些數(shù)據(jù)決定允許客戶(hù)訪(fǎng)問(wèn)儲(chǔ)存郵件,服務(wù)器會(huì)在郵件上加上排它鎖,以防止在進(jìn)入"更新"狀態(tài)前對(duì)郵件的改變。如果成功獲得了排它鎖,服務(wù)器返回一個(gè)"確認(rèn)"狀態(tài)碼。會(huì)話(huà)進(jìn)入"操作狀態(tài)",同時(shí)沒(méi)有任何郵件被標(biāo)記為刪除。如果郵件因?yàn)槟撤N原因不能打開(kāi)(例如,排它鎖不能獲得,客戶(hù)不能訪(fǎng)問(wèn)相應(yīng)的郵件或者郵件不能進(jìn)行語(yǔ)法分析),服務(wù)器將返回"失敗"狀態(tài)碼。在返回"失敗"狀態(tài)碼后,服務(wù)器會(huì)關(guān)閉連接。如果服務(wù)器沒(méi)有關(guān)閉連接,客戶(hù)可以重新發(fā)送確認(rèn)命令,重新開(kāi)始,或者發(fā)送QUIT命令。
  在服務(wù)器打開(kāi)郵件后,它為每個(gè)消息指定一個(gè)消息號(hào),并以八進(jìn)制表示每個(gè)消息的長(zhǎng)度。第一個(gè)消息被指定為1,第二個(gè)消息被指定為2,以此類(lèi)推,第N個(gè)消息被指定為N。在POP3命令和響應(yīng)中,所以的消息號(hào)和長(zhǎng)度以十進(jìn)制表示。
  下面是對(duì)上述三條命令的總結(jié):
 
 
 
5. "操作"狀態(tài)
 
  一旦客戶(hù)向服務(wù)器成功地確認(rèn)了自己的身份,服務(wù)器將鎖住并打開(kāi)相應(yīng)的郵件,這時(shí)POP3會(huì)話(huà)進(jìn)入"操作"狀態(tài),F(xiàn)在客戶(hù)可以重復(fù)下面的POP3命令,對(duì)于每個(gè)命令服務(wù)器都會(huì)返回應(yīng)答。最后,客戶(hù)發(fā)送QUIT命令,會(huì)話(huà)進(jìn)入"更新"狀態(tài)。
  下面是在"操作"狀態(tài)中可用的命令:
 
 
 
 
 
    
6."更新"狀態(tài)

  當(dāng)客戶(hù)在"操作"狀態(tài)下發(fā)送QUIT命令后,會(huì)話(huà)進(jìn)入"更新"狀態(tài)。(注意:如果客戶(hù)在"確認(rèn)"狀態(tài)下發(fā)送QUIT后,會(huì)話(huà)并不進(jìn)入"更新"狀態(tài)。)
  如果會(huì)話(huà)因?yàn)镼UIT命令以外的原因中斷,會(huì)話(huà)并不進(jìn)入"更新"狀態(tài),也不從服務(wù)器中刪除任何信件。
 
 
7.可選的POP3命令

  以上討論的命令是對(duì)POP3服務(wù)的最小實(shí)現(xiàn)。以下說(shuō)明的可選命令允許客戶(hù)更方便地處理信件,這是一個(gè)比較一般的POP3服務(wù)實(shí)現(xiàn)。
 。 TOP msg n
  【參數(shù)】一個(gè)是未被標(biāo)記為刪除的信件數(shù),另一個(gè)是非負(fù)數(shù)(必須提供)
  【限制】?jī)H在"操作"狀態(tài)下使用。
  【說(shuō)明】
  如果服務(wù)器返回"確認(rèn)",響應(yīng)是多行的。在初始的+OK后,服務(wù)器發(fā)送信件頭,一個(gè)空行將信件頭和信件體分開(kāi),對(duì)于多行響應(yīng)要注意字節(jié)填充終止符。
  注意:如果客戶(hù)要求的行數(shù)比信件體中的行數(shù)大,服務(wù)器會(huì)發(fā)送整個(gè)信件。
  【響應(yīng)】+OK:其后有信件頭;
  -ERR:其后無(wú)類(lèi)似消息。
  【例子】
  C: TOP 1 10
  S: +OK
  S: <服務(wù)器發(fā)送消息頭,一個(gè)空行和信件的頭10行>
  S: .
  ...
  C: TOP 100 3
  S: -ERR no such message

 。 UIDL [msg]
  【參數(shù)】信件數(shù)(可選)。如果給出信件數(shù),不包括被標(biāo)記為刪除的信件。
  【限制】?jī)H在"操作"狀態(tài)下使用。
  【說(shuō)明】
  如果給出了參數(shù),且POP3服務(wù)器返回包括上述信息的"確認(rèn)",此行稱(chēng)為信息的"獨(dú)立-ID表"。
  如果沒(méi)有參數(shù),服務(wù)器返回"確認(rèn)"響應(yīng),此響應(yīng)便以多行給出。在初的+OK后,對(duì)于每個(gè)信件,服務(wù)器均給出相應(yīng)的響應(yīng)。此行叫做信件的"獨(dú)立-ID表"。
  為簡(jiǎn)化語(yǔ)法分析,所有服務(wù)器要求使用獨(dú)立-ID表的特定格式。它包括空格和信件的獨(dú)立-ID。
  信件的獨(dú)立-ID由0x21到0x7E字符組成,這個(gè)符號(hào)在給定的存儲(chǔ)郵件中不會(huì)重復(fù)。
  注意:信件不包括被標(biāo)記為刪除的信件。
  【響應(yīng)】+OK:其后是獨(dú)立-ID表;
  -ERR:其后無(wú)類(lèi)似信件。
  【例子】
  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摘要串。
  【限制】?jī)H在POP3確認(rèn)后的"確認(rèn)"狀態(tài)中使用。
  【說(shuō)明】通常,每個(gè)POP3會(huì)話(huà)均以USER/PASS互換開(kāi)始。這導(dǎo)致了用戶(hù)名和口令在網(wǎng)絡(luò)上的顯式傳送,這不會(huì)造成什么危險(xiǎn)。但是,許多客戶(hù)經(jīng)常連接到服務(wù)檢查信件。通常間隔時(shí)間比較短,這就加大了泄密的可能性。
另一種提供"確認(rèn)"過(guò)程的方法是使用APOP命令。
  實(shí)現(xiàn)APOP命令的服務(wù)器包括一個(gè)標(biāo)記確認(rèn)的時(shí)間戳。例如:在UNIX上使用APOP命令的語(yǔ)法為:process-ID.clock@hostname,其中進(jìn)程-ID是進(jìn)程的十進(jìn)制的數(shù),時(shí)鐘是系統(tǒng)時(shí)鐘的十進(jìn)制表示,主機(jī)名與POP3服務(wù)器名一致。
  客戶(hù)記錄下此時(shí)間戳,然后以送APOP命令。name語(yǔ)法和USER命令一致。Digest是采用MD5算法產(chǎn)生的包括時(shí)間戳和共享密鑰的字串。此密鑰是客戶(hù)和服務(wù)器共知的,應(yīng)該注意保護(hù)此密鑰,如果泄密,任何人都能夠以用戶(hù)身份進(jìn)入服務(wù)器。
  如果服務(wù)器接到APOP命令,它驗(yàn)證digest,如果正確,服務(wù)器返回"確認(rèn)",進(jìn)入"操作"狀態(tài);否則,給出"失敗"并停留在"確認(rèn)"狀態(tài)。
  注意:共享密鑰的長(zhǎng)度增加,解讀它的難度也相應(yīng)增加,這個(gè)密鑰應(yīng)該是長(zhǎng)字符串。
  【響應(yīng)】+OK:郵件鎖住并準(zhǔn)備好;
  -ERR:拒絕請(qǐng)求。
  【例子】
  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é)

基礎(chǔ)的POP3命令:
USER name 在"確認(rèn)"狀態(tài)有效
PASS string
QUIT
 
STAT 在"操作"狀態(tài)有效
LIST [msg]
RETR msg
DELE msg
NOOP
RSET
 
QUIT 在"更新"狀態(tài)有效
 
可選的POP3命令:
APOP name digest 在"確認(rèn)"狀態(tài)有效
TOP msg n 在"操作"狀態(tài)有效
UIDL [msg]
 
POP3 響應(yīng):
+OK
-ERR
 
注意:除了STAT,LIST和UIDL的響應(yīng)外,其它命令的響應(yīng)均為"+OK"和 "-ERR"。響應(yīng)后的所有文本將被客戶(hù)略去。

9. POP3會(huì)話(huà)實(shí)例

S: <等待連接到TCP端口110>
C: <打開(kāi)連接>
S: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>
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: <服務(wù)器發(fā)送信件1>
S: .
C: DELE 1
S: +OK message 1 deleted
C: RETR 2
S: +OK 200 octets
S: <服務(wù)器發(fā)送信件2>
S: .
C: DELE 2
S: +OK message 2 deleted
C: QUIT
S: +OK dewey POP3 server signing off (maildrop empty)
C: <關(guān)閉連接>
S: <等待下一次連接>
 
10. 消息格式

  在會(huì)話(huà)過(guò)程中的消息格式都假定與Internet文本消息格式標(biāo)準(zhǔn)一致。應(yīng)該注意的是,由于各個(gè)服務(wù)器對(duì)于換行符的處理不同,因此計(jì)數(shù)不一定相同。通常,在"確認(rèn)"狀態(tài)中,服務(wù)器能夠以八進(jìn)制計(jì)算信件的大小。例如,如果在打開(kāi)儲(chǔ)存郵件時(shí)服務(wù)器內(nèi)部認(rèn)定換行符代表一個(gè)字符,一般服務(wù)器在計(jì)算它時(shí)作為兩個(gè)字符計(jì)。注意,以終止符開(kāi)始的消息行不被計(jì)數(shù)兩次,因?yàn)榭蛻?hù)將在接收到多行響應(yīng)后刪除所有字節(jié)填充。

11. 安全性考慮

  可以推測(cè),使用APOP命令可以提供會(huì)話(huà)期間的保護(hù)。相應(yīng)的,同時(shí)實(shí)現(xiàn)PASS和APOP命令的服務(wù)器只允許用戶(hù)以一種方式訪(fǎng)問(wèn);也就是說(shuō)要么使用USER/PASS組合,要么使用APOP命令,不能同時(shí)使用兩個(gè)。
  而且,注意隨著共享密鑰長(zhǎng)度的增加,解讀的難度也就上升了。服務(wù)器要提供用戶(hù)名時(shí)不給出任何響應(yīng),不給出任何暗示此用戶(hù)名是否正確。而口令卻在網(wǎng)絡(luò)上顯式傳送;使用RETR和TOP命令在網(wǎng)絡(luò)上顯式傳送信件。