天天看點

POP3協定指令原始碼及工作原理

POP3協定指令原始碼及工作原理

Posted on 2007-08-22 16:43 伯樂共勉   一 簡介:

1. POP适用于C/S結構的脫機模型的電子郵件 協定 ,目前已發展到第三版,稱 POP3 。脫機 模型即不能線上操作,不像IMAP4(netscape支援IMAP4)

2. 當客戶機與伺服器連接配接并查詢新電子郵件時,被該客戶機指定的所有将被下載下傳的郵件 都将被程式下載下傳到客戶機,下載下傳後,電子郵件客戶機就可以删除或修改任意郵件,而無需與電子郵件伺服器進一步互動。

3. POP3 客戶向 POP3 伺服器發送指令并等待響應, POP3 指令采用指令行形式,用ASCII碼 表示。 伺服器響應是由一個單獨的指令行組成,或多個指令行組成,響應第一行以ASCII文本+ OK或-ERR指出相應 的操作狀态是成功還是失敗

4. 在 POP3 協定 中有三種狀态,認可狀态,處理狀态,和更新狀态。 當客戶機與伺服器建立聯系時,一旦客戶機提供了自己身份并成功确認,即由認可狀态轉入處理狀态, 在完成相應的操作後客戶機發出quit指令,則進入更新狀态,更新之後最後重返認可狀态。如下圖

等待連接配接 身份确認 quit指令

—— |認可|————— |處理|——————|更新|

|__________________________________|

重返認可狀态

5. 認可狀态的指令語句

一般情況下,大多數現有的 POP3 客戶與伺服器執行采用ASCII明文發送使用者名和密碼,在 認可狀态等 待客戶連接配接的情況下,客戶發出連接配接,并由指令user/pass對在網絡上發送明文使用者名和 密碼給伺服器

進行身份确認。一旦确認成功,便轉入處理狀态。為了避免發送明文密碼的問題,有一種新的認證方法,指令為APOP,使用APOP,密碼在 傳輸之前被加密。 當第一次與伺服器連接配接時, POP3 服 務器向客戶機發送一個ASCII碼問候,這個問候由一串字元組成對每個客戶機是唯一的,與當時的時間有關,然後,客戶機把它的純文字密碼附加到從伺服器接 收到的字元串之後,然後計算出結果字元串的MD5單出函數消息摘要,客戶機把使用者名與MD5消息摘要作為APOP指令的參數一起發送出去。目前,大多數 windows上的郵件客戶軟體不支援APOP指令,qpopper支援。

6. POP3 指令碼如下:

指令 參數 狀态 描述

------------------------------------------

USER username 認可 此指令與下面的pass指令若成功,将導緻狀态轉換

PASS password 認可

APOP Name,Digest 認可 Digest是MD5消息摘要

------------------------------------------

STAT None 處理 請求伺服器發回關于郵箱的統計資料,如郵件總數和總位元組數

UIDL [Msg#] 處理 傳回郵件的唯一辨別符, POP3 會話的每個辨別符都将是唯一的

LIST [Msg#] 處理 傳回郵件數量和每個郵件的大小

RETR [Msg#] 處理 傳回由參數辨別的郵件的全部文本

DELE [Msg#] 處理 伺服器将由參數辨別的郵件标記為删除,由quit指令執行

RSET None 處理 伺服器将重置所有标記為删除的郵件,用于撤消DELE指令

TOP [Msg#] 處理 伺服器将傳回由參數辨別的郵件前n行内容,n必須是正整數

NOOP None 處理 伺服器傳回一個肯定的響應

------------------------------------------

QUIT None 更新

a.客戶機希望結束這次會話

b.如果伺服器處于‘處理’狀态,那麼将進入‘更新’狀态以删除任何标記為删除的郵

c.導緻由處理狀态到更新狀态,又重返認可狀态的轉變

d.如果這個指令發出時伺服器處于‘認可’狀态,則結束會話,不進行‘更新’狀态。

7. POP3 協定 在 TCP /110端口上等待客戶連接配接請求。

8. 若密碼為明文,我如何監聽?

下面的指令在伺服器運作後在螢幕上顯示 POP3 連接配接及指令發送的過程:

#sniffit -a -A. -p 110 -b -s 192.169.11.12

note: 192.168.11.12是客戶機IP位址

你需要事先安裝sniffit這個端口監聽程式

9. 考慮這種情況,若客戶在收取郵件時,假定為15封信等待接收,但由于線路問題,收

到第10封時斷線了,

為什麼下次收時仍然從第一封開始,也即為什麼前10封沒有被從伺服器上删除掉?

任何郵件的删除都必須在quit指令發出後對已标記為删除的郵件執行删除操作,由于中

途斷線,仍處于

處理狀态,沒有機會執行quit指令以進行狀态轉換。

10. pop3 session is locked by another session, please wait 10 minutes then t

ry again.

由于非正常操作引起 POP3 程式内部機制鎖住該次會話。

11. Foxmail與OE(outlook express)的處理機制的不同。

a. 假定伺服器上有三封郵件等待客戶機接收。用foxmail與OE的不同之處在于

foxmail每收一封标記删除一封,而OE則等全部接收完後再全部标記為删除最後執行qui

t指令。

Foxmail OE

-------------------------------

retr 1 retr 1

dele 1 retr 2

retr 2 retr 3

dele 2 dele 1

retr 3 dele 2

dele 3 dele 3

quit quit

b. Foxmail的遠端郵件 管理 是非常優秀的 管理 工具,假定伺服器上有三封信,對第一封

,我們不想接收

想從伺服器直接删除;對第二封,想接收但不删除,對第三封,這一次不想接收,分别

标記後

最後foxmail發出的指令是

dele 1

retr 2

quit

c. 若沒有foxmail,正好有幾封很大的信堵住了,我不想接收,想直接删除它,或者想

檢視這兩封是誰發的?

直接在windows的DOS視窗下用指令行操作,如:

# telnet my.isp.net 110

user username

pass password

list

dele 3

dele 5

quit

--

繼續閱讀