如何通過郵局協議提取郵件

幕後故事看通過郵局協議提取郵件

用於從遠程服務器檢索郵件的郵局協議(POP)是一個非常簡單的協議。 它以直接的方式定義了基本的功能,並且易於實現。 當然,這也很容易理解。

讓我們來看看當您的電子郵件程序在POP帳戶中獲取郵件時幕後發生的情況。 首先,它需要連接到服務器。

嗨,它是我

通常,POP服務器監聽端口110的傳入連接。 從POP客戶端(您的電子郵件程序)連接後,它會希望通過+ OK pop.philo.org做好準備或類似的事情。 + OK表示一切都是 - 確定。 它的負值相當於-ERR ,這意味著出現了問題。 也許你的電子郵件客戶端已經向你顯示了這些負面服務器回復之一。

登錄中

現在服務器已經迎接我們,我們需要使用我們的用戶名登錄 (假設用戶名是“排”,服務器說的用斜體打印):

+ OK pop.philo.org準備好了
用戶排

由於具有此名稱的用戶確實存在,POP服務器以+ OK進行響應,也許我們並不關心其中的一些亂碼。 如果服務器上沒有這樣的用戶,它當然會讓我們恐慌,而-ERR用戶不明

為了使認證完成,我們還需要提供我們的密碼。 這是通過“pass”命令完成的:

+確定發送您的密碼
通過noplato

如果我們正確輸入密碼,服務器會用+ OK密碼或POP服務器的程序員想到的回應。 重要的部分是+ OK 。 不幸的是,密碼也可能是錯誤的。 服務器用乾-ERR用戶名和密碼不匹配 (如果你使用你的用戶名作為你的密碼)。

如果一切順利,但是,我們連接到服務器,它知道我們是誰,因此我們準備好偷看新到郵件。

你有郵件!

在我們成功登錄到服務器上的POP帳戶後,我們可能首先想知道是否有新郵件,然後可能有多少。

用於檢索這些基本郵箱統計信息的命令是STAT

可能的服務器響應是+ OK 18 67042 。 在這種情況下, + OK符號後面的內容確實很重要。 緊接著是郵箱中的郵件數量,然後用空格分隔,以八位字節(八位字節為8位)表示郵箱的大小。

STAT
+確定18 67042

如果沒有郵件,則服務器以+ OK 0 0響應。 由於服務器上有18條新消息,我們可以使用LIST命令列出這些消息。 作為響應,服務器按以下格式列出消息:

LIST
+確定18條消息(67042個八位字節)
1 2552
2 3297
...
18 3270

消息一次列出一個,每個消息的大小都以八位字節為單位。 該列表以一行自行結束。

LIST命令可以將消息的編號作為可選參數,例如LIST 2 。 服務器對此請求的響應應為+ OK 2 3297 ,消息號後跟消息大小。 如果您嘗試列出不存在的消息(如LIST 23) ,則服務器顯示沒有想像,並說: -ERR沒有這樣的消息

大檢索(和刪除)

現在我們知道我們帳戶中有多少條消息,它們有多大,最後是檢索它們的時間,以便我們也可以讀取它們。

現在,在查明我們是否有新郵件後,就是真實的東西。 消息號碼作為RETR命令的參數逐個檢索。

服務器以多行的形式響應+ OK和消息。 該消息自行終止一段時間。 例如:

RETR 1
+確定2552個八比特組
胡說!

如果我們試圖得到一條不存在的消息,我們會得到-ERR沒有這樣的消息

現在我們可以使用DELE命令刪除消息。 (當然,我們也可以在沒有檢索到的情況下刪除郵件,如果它是那些日子之一的話)。

很高興知道服務器不會立即清除消息。 它只是標記為刪除。 如果我們經常結束與服務器的連接,則只會發生實際刪除。 因此,例如,如果連接突然死亡,就不會丟失郵件。

服務器對DELE命令的響應是+ OK消息被刪除

DELE 1
+確定消息1已刪除

如果確實是那些日子之一,並且我們標記了一條我們不希望被刪除的刪除消息,則可以通過重置刪除標記來取消刪除所有消息。 RSET命令將郵箱恢復到我們登錄之前的狀態。

服務器響應一個+ OK和可能的消息數量:

RSET
+確定18消息

在我們檢索並刪除了所有消息之後,是時候使用QUIT命令說再見了。 這將清除標記為刪除的消息並關閉連接。 服務器響應+ OK和告別信息:

放棄
再見,再見

服務器可能無法刪除消息。 然後它會響應一個錯誤,如-ERR消息2未被刪除