POP3協議(電子郵件郵局協議)中UIDL和TOP命令在實際使用中的作用

一隻會鏟史的貓發表於2022-04-11

POP3是電子郵件協議中用於接收郵件的協議,相較於傳送郵件的SMTP協議,POP3的命令要多一些。主要的命令有LIST、STAT、RETR、DELE、UIDL、TOP、QUIT,以及用於登入郵箱的USER和PASS命令。
 
介紹POP3命令的文章有很多,這裡重點介紹UIDL和TOP在實際使用中的現實意義。
 
使用這些命令非常簡單,可以用telnet命令進行模擬互動。下面以pop.yeah.net郵箱伺服器為例,在命令列模式下輸入:

telnet pop.yeah.net 110
 

當使用者連線上POP郵件伺服器時,會收到伺服器返回的歡迎語,接著使用USER和PASS命令登入郵箱,登入成功後,就可以使用其它命令與POP伺服器進行線上互動了。
其中,STAT命令顯示郵箱中的郵件數量和所有郵件的大小(以位元組為單位)。
LIST命令用於列出郵箱中的所有郵件資訊,確切的說是訊息摘要,因為這裡的郵件資訊並不是指郵件的主題、發件人、收件人等資訊,而只是簡單的郵件編號(msgno)和郵件大小。
這裡顯示的有8封郵件,由於可能存在多條(多行)訊息,因此POP協議中以"."加回車換行("\r\n")作為整個LIST響應訊息的結束,此外接收郵件的RETR命令也是以“.\r\n”作為整個郵件的結束。

顯然我們無法通過LIST命令看到郵件具體的摘要資訊,比如最重要的郵件主題和發件人。

TOP命令的作用

此時TOP命令就發揮了作用,該命令用於獲取某封郵件的郵件頭和郵件體中的前N行內容(TOP msgno N)。使用如下命令可以獲取郵件頭。

TOP 1 0

注意這裡的N是指郵件體中的前N行內容,如果N為0,則表示不返回內容,僅返回郵件頭(這裡獲取郵件編號為1的郵件頭)。
 

郵件頭中包含了主題(Subject)、發件人(From)、收件人(To)、抄送人(Cc)等重要資訊。當然這些資訊需要你自己寫程式進行逐行解析。

通過LISTTOP命令的結合使用,我們就可以快速的檢視郵箱中所有郵件的概要資訊。這樣可以避免將整個郵件全部下載下來。
當我們看到感興趣的郵件時(主題和發件人)可以決定是否使用RETR命令將整封郵件讀取下來;反之,如果是垃圾郵件,則直接使用DELE命令將其刪除。

UIDL命令的作用

UIDL命令用於查詢某封郵件的唯一識別符號。
該命令的現實意義在於:當你對郵件進行持久化,也就是下載到本地進行離線管理時,可作為識別該郵件的唯一身份ID,從而避免重複下載,並進行有效的本地化管理。
通過上面的命令我們可以看到,POP協議是以郵件編號(msgno)作為郵件標識進行線上互動操作,但郵件編號(msgno)只能保證在本次會話中保持唯一,不能保證在下次會話中不會發生變化。如果刪除了第1封郵件,並退出重新登入郵箱,郵件的順序將會打亂。

附帶說明一下:DELE命令只是將郵件在本次會話中標記為刪除,只有在QUIT命令發出時,也就是退出POP會話時,伺服器才會進行一次真正的郵件刪除操作。
 
有些人使用郵件客戶端程式接收郵件後,並不會從pop伺服器上刪除郵件。這樣可以確保在不同的終端上還能繼續檢視郵件,比如使用公司的Foxmail接收了郵件,如果回家或出差時,可以使用其它終端裝置(筆記本或手機)的郵件客戶端程式(比如Outlook)將郵件再下載一遍。這時客戶端程式會通過郵件的UIDL來確定該郵件是否已下載過,比如我們可以使用UIDL來作為下載郵件的檔名,如果發現檔案已存在,就不需要從POP伺服器進行再次讀取。
 

通過LISTUIDL命令的結合使用,我們可以對離線郵件(已下載郵件)進行線上比對,從而判斷是否有新郵件需要接收
 

附: 部分常用郵箱使用的UIDL一覽

qq郵箱

 
新浪郵箱

 
網易郵箱

 
微軟郵箱

 
附:POP3:基於命令列的電子郵件(EMail)線上檢視和批量下載工具

相關文章