POP3協議命令原始碼及工作原理
發表時間:2023-08-17 來源:明輝站整理相關軟件相關文章人氣:
[摘要]http://www.linuxforum.net Jephe Wu (2001-04-21 18:17:49) 一 簡介: 1. POP適用于C/S結構的脫機模型的電子郵件協議,目前已發展到第三版...
http://www.linuxforum.net Jephe Wu (2001-04-21 18:17:49)
一 簡介:
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 try again.
由于非正常操作引起POP3程序內部機制鎖住該次會話。
11. Foxmail與OE(outlook express)的處理機制的不同。
a. 假定服務器上有三封郵件等待客戶機接收。用foxmail與OE的不同之處在于
foxmail每收一封標記刪除一封,而OE則等全部接收完后再全部標記為刪除最后執行quit命令。
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
Jephe Wu