在Internet,POP3(PostOfficeProtocol3)協議通常被用來接收電子郵件。這個協議很容易學,因為它只包含12個命令(其中有3個你完全可以忽略它們的存在)。這些命令被客戶端計算機用來發送給遠程服務器。反過來,服務器返回給客戶端計算機兩個回應代碼。如果你還沒有看本站另一篇文章-“WinsockTerminal示例程序”的話,請先閱讀那篇文章,因為你需要那個程序來做實驗。
運行示例程序,單擊工具欄上的"Connectto"按鈕。在彈出的對話框中輸入你要連機的郵件服務器的地址例如:
mail.comset.net
選擇POP3協議,然後單擊"Connect"按鈕。如果成功的話(如果出錯,肯定是你服務器地址有問題,別懷疑到程序頭上來),你會在文本框中看到服務器返回給你的信息。我的服務器的應答如下:
OKPOP3mail.comset.netv5.49serverready
這個字符串告訴你連機成功了。不同服務器的回應會有所不同,但開頭部分都是一樣的,那就是:
" OK"。它的意思是服務器接受客戶端計算機所使用的命令順序及語法。如果開頭是"-ERR",則表示你使用了錯誤的命令。在你的應用程序中,只須處理來自服務器的回應的前面幾個字符。這麼小的處理量正是POP3相對其它協議的優勢所在。
授權狀態
好了,現在我們已經建立了同服務器的連接並且從服務器那裡得到了肯定的回答。接下來要做的就是告訴服務器你的身份。服務器要管理成千上萬個郵箱並不是件好難的事。它已為每個郵箱建立好了一個帳戶。每個帳戶由用戶名和密碼構成。當你連上服務器後,要發送的第一個命令就是USER,用戶名是該命令的參數。具體寫法如下:
USERusername
如果用戶名已注冊,服務器將返回一條正確的消息,然後你就可以輸入下面的命令,告訴服務器你的密碼。
PASSpassword
如果用戶名和密碼吻合的話,服務器同樣會返回一條正確的消息,告訴你可以進入下一階段,即TRANSACTIONstate.
TRANSACTION狀態
為了知道你的郵箱中目前有多少封郵件以及這些郵件的大小,可使用STAT命令。它會告訴你郵箱目前的狀態。服務器所返回的信息可能會是下面的樣子:
OK00(你的郵箱中沒有郵件)
OK3825(你的郵箱中有三封郵件,大小為825個八位字節)
如果郵箱中沒有郵件,就沒有什麼好做的了,用QUIT命令就可結束同服務器的連接。如果郵箱中有郵件的話,你可以用RETR命令把郵件下載到你自己的機器上。這個命令要求郵件的索引作為其參數。例如,如果我們想收第一封郵件,可輸入如下命令:
RETR1
要想取回其它的郵件,用上面的命令加上相應的郵件編號就行了。如果你輸入的郵件編號超過了信箱中的郵件數量,服務器就會返回一個"-ERR"給你。作為對RETR命令的回應,服務器會返回給你一個字符串。這個字符串包含下面這些東西:" OK"、郵件大小、郵件文本以及一個包含小數點的字符串。最後一個字符串,也就是小數點表示消息的結束。例如:
Client:RETR2
Server: OK234octets
Server:<郵件文本>
Server:.
注意上面收郵件的過程並不意味著將這些郵件轉移到你的計算機上。你是得到這些郵件的一份拷貝,你的住信箱中仍會存放這些郵件直到你用DELE命令刪除它們。同樣地,DELE命令也需要你提供郵件的索引號。實際上,當你使用了DELE命令後,這些郵件並不是立即從服務器上刪除。這些郵件只是被做上了一個刪除的標記,當你斷開同服務器的連接後,才真正從服務器上刪除。如果你想移除這些刪除標記,用RSET命令。這個命令並不針對某一個特定的郵件,而是移除所有刪除標記,所以你不需要提供郵件索引號給這個命令。
除了上面所說的命令之外,當你還處在TRANSACTION狀態時,POP3還支持另外兩個命令。這兩個命令是:LIST和NOOP。LIST命令可用來列出郵件的信息。就象下面所顯示的一樣:
Client:LIST
Server: OK2messages(320octets)
Server:1120
Server:2200
Server:.
通過對LIST命令提供郵件索引號,可列出特定郵件的信息,如下例:
Client:LIST2
Server: OK2200
NOOP命令具體的事情不做,只是用來檢查同服務器的連接。
UPDATE狀態
當你處於UPDATE狀態時,你只有一個命令可用,那就是:QUIT。用這個命令來確認你所做的所有改變,刪除被標上刪除標記的郵件以及關閉連接。
其它POP3命令
POP3協議還支持另外三個命令:TOP、UIDL及APOP。這裡只介紹第一個命令。TOP命令可用來獲取郵件頭及被預定義的一塊字符串。通常如果你的郵箱中中一封容量很大的郵件時,這個命令特別有用。用TOP命令,你可以只顯示郵件頭的信息,從中找出郵件作者有主題。你甚至可以只下載這部分信息。該命令的語法如下:
TOPmsgn
msg-郵件的索引號
n-你想要顯示的行數->