pop3全稱為post office protocol version3,即郵局協議第3版。它被使用者**用來郵件伺服器取得郵件。pop3採用的也是c/s通訊 模型,對應的rfc文 檔為rfc1939。 該協議非常簡單,所以我們只重點介紹其通訊過程,而相關的一些概念和術語請參考rfc文件
. 通訊過程
使用者從郵件伺服器上接收郵件的典型通訊過程如下。
1)使用者執行使用者**(如foxmail, outlook express)。
2)使用者**(以下簡稱客戶端)與郵件伺服器(以下簡稱伺服器端)的110埠建立tcp連 接。
4)服務端解析使用者的命令,做出相應動作並返回給客戶端乙個響應。
5)3)和4)交替進行,直到接收完所有郵件轉到步驟6),或兩者的連線被意外中斷而直接退出。
6)使用者**解析從伺服器端獲得的郵件,以適當地形式(如可讀)的形式呈現給使用者。
其中2)、3)和4)用pop3協議通訊。通訊過程,可以用圖1表示。可以看出命令和響應是pop3通訊的重點,我們將予以重點講述。
圖1.pop3通訊過程
pop3的命令不多,它的一般形式是:command [parameter] 。
command:ascii形式的命令名
parameter:相應的命令引數
:回車換行符(0dh, 0ah)(c語言中為\r\n)
伺服器響應是由乙個單獨的命令列組成,或多個命令列組成,響應第一行「+ok」或「-err」開頭,然後再加上一些ascii文字。
+ok:操作成功
-err:操作失敗
pop3協議中有三種狀態,認正狀態,處理狀態,和更新狀態。命令的執行可以改變協議的狀態,而對於具體的某命令,它只能在具體的某狀態下使用,這些請參看表1和rfc193。
客戶機與伺服器剛與伺服器建立連線時,它的狀態為認證狀態;一旦客戶機提供了自己身份並被成功地確認,即由認可狀態轉入處理狀態; 在完成相應的操作後客戶機發出quit命令(具體說明見後續內容),則進入更新狀態,更新之後又重返認可狀態;當然在認可狀態下執行quit命令,可釋放連線。
---建立連線---|認可|--認證成 功--|處理|--執行quit--|更新|
|_______ -quit結束_________________|
命令和響應的格式是語法,各命令和響應的意思則是語義,各命令和各響應在時間上的關係則是同步。我們還是通過以個簡單的pop3通訊過程來說明協議的這三個 要素。
c:telnet pop3.126.com 110 /* 以telnet方式連線126郵件伺服器 */
s:+ok welcome to coremail mail pop3 server (126coms[3adb99eb4207ae5256632eecb8f8b4855]) /* +ok,代表命令成功,其後的資訊則隨伺服器的不同而不同*/
c:user bripengandre /*採用明文認證*/
s:+ok core mail
c:pass pop3world /*傳送郵箱密碼*/
s:+ok 654 message(s) [30930370 byte(s)] /*認證成功,轉入處理狀態*/
c:list 1 /*顯示第一封郵件的資訊*/
s:+ok 1 5184 ./*第一封郵件 的大小為5184位元組 */
c:uidl 1 /*返回第一封郵件的唯一識別符號*/
s:+ok 1 1tbisbshaex9byi9eqaasd /*數字1後的長字串就是第一封郵件的唯一標誌符*/
s:+ok 5184 octets /*第一封郵件的大小為5184位元組 */
s:receive… /*第一封郵件的具體內容 */
s:…c:quit /*轉入更新狀態,接著再轉入認證狀態*/
s:+ok
c: quit /*退出連線*/
s:+ok core mail /*成功地退出了連線*/
對於上述的過程,補充如下幾點內容。
1)「c:」開頭的行(不包括"c:")是客戶端的輸入,而以「s:」開頭的行(不包括"s:")則是伺服器的輸出。
2)上述的命令並不一定會一次性成功,伺服器會返回錯誤響應(以「-err」開頭),客戶端應該按照協 議規定的時序,來輸入後續的命令(或重複執行失敗的命令,或重置會話,或退出會話等等)。
3)上述過程是示意性的,實際過程可能與其有較大不同。例如,實際過程中可能使用加密認證(md5摘要認證)。
smtp命令不區分大小寫,但引數區分大小寫,有關這方面的詳細說明請參考rfc1939。常用的命令如表 1所示。
命 令參 數
使 用在何種狀態中
描 述user
username
認證此命令與下面的pass命令若成功,將導致狀態轉 換
pass
password
認證此命令若成功,狀態轉化為更新
apop
name,digest
認證digest是md5訊息摘要
stat
none
處理請求伺服器發回關於郵箱的統計資料,如郵件總數和總位元組數
uidl
[msg#](郵件號,下同)
處理返回郵件的唯一識別符號,pop3會話的每個識別符號都將是唯一的
list
[msg#]
處理返回郵件的唯一識別符號,pop3會話的每個識別符號都將是唯一的
retr
[msg#]
處理返回由引數標識的郵件的全部文字
dele
[msg#]
處理伺服器將由引數標識的郵件標記為刪除,由quit命 令執行
top[msg#]
處理伺服器將返回由引數標識的郵件的郵件頭+前n行內容,n必須是正整數
noop
none
處理伺服器返回乙個肯定的響應,用於測試連線是否成功
quit
none
處理、認證
1)如果伺服器處於「處理」狀態,麼將進入「更新」狀態以刪除任何標記為 刪除的郵件,並重返「認證」狀態。
2)如果伺服器處於「認證」狀態,則結束會話,退出連線
表 1 pop3的常用命令
至於響應則如2.2.1所述,由「+ok」或「-err」開頭,後跟一些可讀的說明和一些其它引數(對retr,這個引數就是郵件的內容)。更詳細的說明請參考rfc1939。
POP3協議命令原始碼及工作原理
posted on 2007 08 22 16 43 伯樂共勉 一 簡介 1.pop適用於c s結構的離線模型的電子郵件 協議 目前已發展到第三版,稱 3.pop3 客戶向 pop3 伺服器傳送命令並等待響應,pop3 命令採用命令列形式,用ascii碼 表示。伺服器響應是由乙個單獨的命令列組成,或...
POP3協議命令原始碼及工作原理
任何郵件的刪除都必須在quit命令發出後對已標記為刪除的郵件執行刪除操作,由於中途斷線,仍處於 處理狀態,沒有機會執行quit命令以進行狀態轉換。10.pop3 session is locked by another session,please wait 10 minutes then try ...
POP3協議命令原始碼及工作原理
一 簡介 1.pop適用於c s結構的離線模型的電子郵件協議,目前已發展 netscape支援imap4 2.當客戶機與伺服器連線並查詢新電子郵件時,被該客戶機指 電子郵件客戶機就可以刪除或修改任意郵件,而無需與電子郵件 伺服器進一步互動。3.pop3客戶向pop3伺服器傳送命令並等待響應,pop3...