?? pop3協議.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0044)http://www.longen.org/l-r/detaill~r/POP3.htm -->
<HTML><HEAD><TITLE>郵局協議</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY>
<TABLE width="93%" border=0>
<TBODY>
<TR>
<TD width="100%"><FONT face=宋體 size=3><B>POP3 郵局協議-版本3</B>
<P>1. 簡介</P>
<P>對于在網絡上的比較小的結點,支持消息傳輸系統(MTS)是不實際的。例如,一臺工作站可能不具有充足的資源允許SMTP服務器和相當的本地郵件傳送系統保持序駐留,并持續運行。同樣的,將一臺個人計算機長時間連接在IP類型網絡上的費用也是可觀的(結點缺少的資源被稱為“聯絡性”)。</P>
<P>雖然如此,在這樣的小結點上允許管理郵件是十分有用的,并且這些結點經常支持一個用戶代理來管理郵件。為解決這一問題,能夠支持MTS的結點就為這些不能支持的結點提供了郵件存儲功能。郵局協議-版本3就是使這樣的工作站可以用一種比較實用的方法來訪問存儲于服務器上的儲存郵件。通常,這意味著工作站可以從服務器上取得郵件,而服務器為它暫時保存郵件。
</P>
<P>在下文中,客戶主機指的是利用POP3服務的主機,而服務器主機指的是提供POP3服務的主機。</P>
<P>2. 簡單說明</P>
<P>在此文檔中不指明客戶主機如何將郵件送入到傳送系統中去。但這里有一個說明:當用戶代理需要將信息送到傳送系統時,它在接力主機上建立SMTP連接(這些接力主機可以是POP3主機,也可以不是)。</P>
<P> </P>
<P>3. 基本操作</P>
<P>初始時,服務器通過偵聽TCP端口110開始POP3服務。當客戶主機需要使用服務時,它將與服務器主機建立TCP連接。當連接建立后,POP3發送確認消息。客戶和POP3服務器相互(分別)交換命令和響應,這一過程一直要持續到連接終止。</P>
<P>POP3命令由一個命令和一些參數組成。所有命令以一個CRLF對結束。命令和參數由可打印的ASCII字符組成,它們之間由空格間隔。命令一般是三到四個字母,每個參數卻可達40個字符長。</P>
<P>POP3響應由一個狀態碼和一個可能跟有附加信息的命令組成。所有響應也是由CRLF對結束。現在有兩種狀態碼,“確定” ("+OK")和“失敗”
("-ERR")。</P>
<P>對于特定命令的響應是由許多字符組成的。在這些情況中,下面一一表述:在發送第一行響應和一個CRLF之后,任何的附加信息行發送,他們也由CRLF對結束。當所有信息發送結束時,發送最后一行,包括一個結束字符(十進制碼46,也就是“.”)和一個CRLF對。如果信息中的任何一行以結束字符開始,此行就是通過在那一行預先裝入結束而進行字符填充的。因此,多行響應由五個CRLF.CRLF
結束。當檢測多行響應時,客戶檢測以確認此行是否以結束字符開始。如果是的,而且其后的字符不是CRLF,此行的第一個字符(結束字符)將被拋棄;如果其后緊跟CRLF,從POP服務器來的響應終止,包括.CRLF
的行也不被認為是多行響應的一部分了。</P>
<P>在生命周期中,POP3會話有幾個不同的狀態。一旦TCP連接被打開,而且POP3服務器發送了確認信息,此過程就進入了“確認”狀態。在此狀態中,客戶必須向POP3服務器確認自己是其的客戶。一旦確認成功,服務器就獲取與客戶郵件相關的資源,此時這一過程進入了“操作”狀態。在此狀態中,客戶提出服務,當客戶發出QUIT命令時,此過程進入了“更新”狀態。在此狀態中,POP3服務器釋放在“操作”狀態中取得的資源,并發送消息,終止連接。</P>
<P>POP3服務器可以擁有一個自動退出登錄的記時器。此記時器必須至少可以記錄10分鐘。這樣從客戶發送的消息才可能刷新此記時器。當記時器失效時,POP3會話并不進入“更新”狀態,而是關閉TCP連接,而且不刪除任何消息,不向客戶發送任何響應。</P>
<P> </P>
<P>4. “確認”狀態</P>
<P> </P>
<P>一時TCP連接由POP3客戶打開,POP3服務器發送一個單行的確認。這個消息可以是由CRLF結束的任何字符。例如,它可以是: </P>
<P>S: +OK POP3 server ready</P>
<P> </P>
<P>注意:這個消息是一個POP3應答。POP3服務器應該給出一個“確定”響應作為確認。</P>
<P>此時POP3會話就進入了“確認”狀態。此時,客戶必須向服務器證明它的身份。在文檔中介紹兩種可能的處理機制,一種是USER和PASS命令,另一種是在后面要介紹的APOP命令。</P>
<P>用USER和PASS命令進行確認過程,客戶必須首先發送USER命令,如果POP3服務器以“確認”狀態碼響應,客戶就可以發送PASS命令以完成確認,或者發送QUIT命令終止POP3會話。如果POP3服務器返回“失敗”狀態碼,客戶可以再發送確認命令,或者發送QUIT命令。</P>
<P>當客戶發送了PASS命令后,服務器根據USER和PASS命令的附加信息決定是否允許訪問相應的存儲郵件。</P>
<P>一旦服務器通過這些數據決定允許客戶訪問儲存郵件,服務器會在郵件上加上排它鎖,以防止在進入“更新”狀態前對郵件的改變。如果成功獲得了排它鎖,服務器返回一個“確認”狀態碼。會話進入“操作狀態”,同時沒有任何郵件被標記為刪除。如果郵件因為某種原因不能打開(例如,排它鎖不能獲得,客戶不能訪問相應的郵件或者郵件不能進行語法分析),服務器將返回“失敗”狀態碼。在返回“失敗”狀態碼后,服務器會關閉連接。如果服務器沒有關閉連接,客戶可以重新發送確認命令,重新開始,或者發送QUIT命令。</P>
<P>在服務器打開郵件后,它為每個消息指定一個消息號,并以八進制表示每個消息的長度。第一個消息被指定為1,第二個消息被指定為2,以此類推,第N個消息被指定為N。在POP3命令和響應中,所以的消息號和長度以十進制表示。</P>
<P>下面是對上述三條命令的總結:</P>
<P></FONT> </P>
<TABLE cellSpacing=1 cellPadding=7 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width=75><FONT face=宋體 size=3>命令格式</FONT></TD>
<TD vAlign=top width=52><FONT face=宋體 size=3>參數</FONT></TD>
<TD vAlign=top width=109><FONT face=宋體 size=3>限制</FONT></TD>
<TD vAlign=top width=110><FONT face=宋體 size=3>響應</FONT></TD>
<TD vAlign=top width=236><FONT face=宋體 size=3>例子</FONT></TD></TR>
<TR>
<TD vAlign=top width=75><FONT face=宋體 size=3>USER name</FONT></TD>
<TD vAlign=top width=52><FONT face=宋體
size=3>指定郵箱的字符串,這對服務器至關重要</FONT></TD>
<TD vAlign=top width=109><FONT face=宋體
size=3>僅在USER和PASS命令失敗后或在“確認”狀態中使用</FONT></TD>
<TD vAlign=top width=110><FONT face=宋體 size=3>+OK:有效郵箱;
<P>-ERR:無效郵箱</FONT></P></TD>
<TD vAlign=top width=236><FONT face=宋體 size=3>C: USER mrose
<P>S: +OK mrose is a real hoopy frood</P>
<P>...</P>
<P>C: USER frated</P>
<P>S: -ERR sorry, no mailbox for frated here</FONT></P></TD></TR>
<TR>
<TD vAlign=top width=75><FONT face=宋體 size=3>PASS string</FONT></TD>
<TD vAlign=top width=52><FONT face=宋體 size=3>口令</FONT></TD>
<TD vAlign=top width=109><FONT face=宋體
size=3>僅在“確認”狀態中USER命令成功后使用(因為此命令只有一個參數,因此空格不再作為分隔符,而作為口令的一部分)</FONT></TD>
<TD vAlign=top width=110><FONT face=宋體 size=3>+OK:郵件鎖住并已經準備好;
<P>-ERR無效口令或無法鎖住郵件</FONT></P></TD>
<TD vAlign=top width=236><FONT face=宋體 size=3>C: USER mrose
<P>S: +OK mrose is a real hoopy frood</P>
<P>C: PASS secret</P>
<P>S: +OK mrose's maildrop has 2 messages (320 octets)</P>
<P>...</P>
<P>C: USER mrose</P>
<P>S: +OK mrose is a real hoopy frood</P>
<P>C: PASS secret</P>
<P>S: -ERR maildrop already locked</FONT></P></TD></TR>
<TR>
<TD vAlign=top width=75><FONT face=宋體 size=3>QUIT</FONT></TD>
<TD vAlign=top width=52><FONT face=宋體 size=3>(無)</FONT></TD>
<TD vAlign=top width=109><FONT face=宋體 size=3>(無)</FONT></TD>
<TD vAlign=top width=110><FONT face=宋體 size=3>+OK</FONT></TD>
<TD vAlign=top width=236><FONT face=宋體 size=3>C: QUIT
<P>S: +OK dewey POP3 server signing
off</FONT></P></TD></TR></TBODY></TABLE>
<P><FONT face=宋體 size=3> </P>
<P> </P>
<P>5. “操作”狀態</P>
<P> </P>
<P>一旦客戶向服務器成功地確認了自己的身份,服務器將鎖住并打開相應的郵件,這時POP3會話進入“操作”狀態。現在客戶可以重復下面的POP3命令,對于每個命令服務器都會返回應答。最后,客戶發送QUIT命令,會話進入“更新”狀態。</P>
<P>下面是在“操作”狀態中可用的命令:</FONT></P>
<TABLE cellSpacing=1 cellPadding=7 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width=57><FONT face=宋體 size=3>命令</FONT></TD>
<TD vAlign=top width=51><FONT face=宋體 size=3>參數</FONT></TD>
<TD vAlign=top width=80><FONT face=宋體 size=3>限制</FONT></TD>
<TD vAlign=top width=204><FONT face=宋體 size=3>說明</FONT></TD>
<TD vAlign=top width=141><FONT face=宋體 size=3>響應</FONT></TD>
<TD vAlign=top width=249><FONT face=宋體 size=3>例子</FONT></TD></TR>
<TR>
<TD vAlign=top width=57><FONT face=宋體 size=3>STAT</FONT></TD>
<TD vAlign=top width=51><FONT face=宋體 size=3>(無)</FONT></TD>
<TD vAlign=top width=80><FONT face=宋體 size=3>僅在“操作”狀態下可用。</FONT></TD>
<TD vAlign=top width=204><FONT face=宋體
size=3>服務器以包括郵件信息的響應做為“確認”。為簡化語法分析,所有的服務器要求使用郵件列表的特定格式。“確認”響應由一個空格,以八進制表示的郵件數目,一個空格和郵件大小。這是最小實現,高級的實現還需要別的信息。
<P>注意:被標記為刪除的信件不在此列。</FONT></P></TD>
<TD vAlign=top width=141><FONT face=宋體 size=3>+OK: nn mm</FONT></TD>
<TD vAlign=top width=249><FONT face=宋體 size=3>C: STAT
<P>S: +OK 2 320</FONT></P></TD></TR>
<TR>
<TD vAlign=top width=57><FONT face=宋體 size=3>LIST [msg]</FONT></TD>
<TD vAlign=top width=51><FONT face=宋體
size=3>信件數目(可選),如果出現,不包括標記為刪除的信件。</FONT></TD>
<TD vAlign=top width=80><FONT face=宋體 size=3>僅在“操作”狀態下可用。</FONT></TD>
<TD vAlign=top width=204><FONT face=宋體
size=3>如果給出了參數,且POP3服務器返回包括上述信息的“確認”,此行稱為信息的“掃描表”。
<P>如果沒有參數,服務器返回“確認”響應,此響應便以多行給出。在初的+OK后,對于每個信件,服務器均給出相應的響應。</P>
<P>為簡化語法分析,所有服務器要求使用掃描表的特定格式。它包括空格,每個郵件的確切大小。這是最小實現,高級的實現還需要別的信息。</P>
<P>注意:被標記為刪除的信件不在此列。</FONT></P></TD>
<TD vAlign=top width=141><FONT face=宋體 size=3>+OK:其后跟掃描表;
<P>-ERR:無掃描。</FONT></P></TD>
<TD vAlign=top width=249><FONT face=宋體 size=3>C: LIST
<P>S: +OK 2 messages (320 octets)</P>
<P>S: 1 120</P>
<P>S: 2 200</P>
<P>S: .</P>
<P>...</P>
<P>C: LIST 2</P>
<P>S: +OK 2 200</P>
<P>...</P>
<P>C: LIST 3</P>
<P>S: -ERR no such message, only 2 messages in
maildrop</FONT></P></TD></TR>
<TR>
<TD vAlign=top width=57><FONT face=宋體 size=3>RETR msg</FONT></TD>
<TD vAlign=top width=51><FONT face=宋體
size=3>不包括標記為刪除的信件數目。</FONT></TD>
<TD vAlign=top width=80><FONT face=宋體 size=3>僅在“操作”狀態下可用。</FONT></TD>
<TD vAlign=top width=204><FONT face=宋體
size=3>如果服務器返回“確認”,給出的響應是多行的。在初始的+OK后,服務器發送與給定信息號對應的信息,對于多行響應,注意字節填充終止符。</FONT></TD>
<TD vAlign=top width=141><FONT face=宋體 size=3>+OK:消息在其后;
<P>-ERR:其后無消息。</FONT></P></TD>
<TD vAlign=top width=249><FONT face=宋體 size=3>C: RETR 1
<P>S: +OK 120 octets</P>
<P>S: <the POP3 server sends the entire message here></P>
<P>S: .</FONT></P></TD></TR>
<TR>
<TD vAlign=top width=57><FONT face=宋體 size=3>DELE msg</FONT></TD>
<TD vAlign=top width=51><FONT face=宋體
size=3>不包括標記為刪除的信件數目。</FONT></TD>
<TD vAlign=top width=80><FONT face=宋體 size=3>僅在“操作”狀態下可用。</FONT></TD>
<TD vAlign=top width=204><FONT face=宋體
size=3>服務器將此信件標記為刪除,以后任何關于此信件的操作就會產生錯誤。服務器在會話進入“更新”狀態前不會真正刪除此信件。</FONT></TD>
<TD vAlign=top width=141><FONT face=宋體 size=3>+OK:信件被刪除;
<P>-ERR:無此信件。</FONT></P></TD>
<TD vAlign=top width=249><FONT face=宋體 size=3>C: DELE 1
<P>S: +OK message 1 deleted</P>
<P>...</P>
<P>C: DELE 2</P>
<P>S: -ERR message 2 already deleted</FONT></P></TD></TR>
<TR>
<TD vAlign=top width=57><FONT face=宋體 size=3>NOOP</FONT></TD>
<TD vAlign=top width=51><FONT face=宋體 size=3>(無)</FONT></TD>
<TD vAlign=top width=80><FONT face=宋體 size=3>僅在“操作”狀態下可用。</FONT></TD>
<TD vAlign=top width=204><FONT face=宋體 size=3>服務器僅返回“確認”。</FONT></TD>
<TD vAlign=top width=141><FONT face=宋體 size=3>+OK</FONT></TD>
<TD vAlign=top width=249><FONT face=宋體 size=3>C: NOOP
<P>S: +OK</FONT></P></TD></TR>
<TR>
<TD vAlign=top width=57><FONT face=宋體 size=3>RSET</FONT></TD>
<TD vAlign=top width=51><FONT face=宋體 size=3>(無)</FONT></TD>
<TD vAlign=top width=80><FONT face=宋體 size=3>僅在“操作”狀態下可用。</FONT></TD>
<TD vAlign=top width=204><FONT face=宋體
size=3>所有被標記為刪除的信件復位,服務器返回“確認”。</FONT></TD>
<TD vAlign=top width=141><FONT face=宋體 size=3>+OK</FONT></TD>
<TD vAlign=top width=249><FONT face=宋體 size=3>C: RSET
<P>S: +OK maildrop has 2 messages
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -