IMAP4協議簡介

IMAP是斯坦福大學在1986年開發的,它是一個開放的標準,被設計成POP的超集,而POP是個地位牢固的開放郵件標準。IMAP標準的最新版是IMAP第4版修訂版1(RFC 2060)。IMAP第4版修訂版1與IMAP4的實際差別僅僅在於前者提高了撥號鏈路的性能。有關IMAP4標準的詳細信息請參見華盛頓大學的IMAP主頁(www.washington.edu/imap/)。儘管在日常使用中,IMAP的特性及對它的支持還沒有壓倒POP3,但是它的發展趨勢已經顯而易見了。主要的羣件產品廠商都計劃支持IMAP4。 
根據定義,POP3是個存儲轉發的信息交換系統。POP3郵件服務器把消息發送給客戶,自己並不在服務器上保存副本。與之不同,IMAP4是個客戶機/服務器模式的應用。無論是POP3還是IMAP4,進來的郵件都存儲在中央的郵件服務器上。用戶使用遵循協議的郵件客戶軟件來連接到郵件服務器上,先進行身份驗證,鑑定登錄名和口令,然後用戶才獲得訪問郵箱的權利。但是,二者的共性僅限於此。

與POP3不同,IMAP4能以三種模式或者說消息傳送範式來與客戶進行交互:離線、在線和斷連方式。此外,IMAP4可以讓用戶訪問多個私用和共享郵箱。
在離線方式中,客戶軟件把郵箱存儲在本地硬盤上以進行讀取和撰寫信息的工作。當需要發送和接受消息時,用戶才連接服務器。對於那些長期奔波、很少停留在某個固定處所的人,他們通常使用離線方式。POP3典型地以離線方式工作。

相比之下,在線用戶訪問的郵箱是在郵件服務器上,但是郵箱仍然由客戶軟件處理。郵件始終存儲在服務器上。在線方式主要是由位置固定的用戶使用,典型地是在快速LAN連接下進行。但是從遠程撥進的功能較弱的計算機在這種模式下也可以工作得很好。有一些POP3服務器也提供了在線功能,但是,它們沒有達到IMAP4的功能級別。

斷連方式提供了最大的靈活性。客戶軟件把用戶選定的消息和附件複製或緩存到本地磁盤上,並把原始副本留存在郵件服務器上。緩存中的郵件可以被用戶處理,以後用戶重新連接郵件服務器時,這些郵件可以與服務器進行再同步。當前,該特性主要由郵件服務器實現,很少有客戶軟件支持斷連方式。在我們評測的產品中,Sun的Internet Mail Client 是唯一提供這一功能的客戶軟件。

對於IMAP4而言,無論是在哪一種操作系統上,使用IMAP4郵件客戶軟件的用戶都可以讀取和回覆郵件,遠程地把郵件存儲在層次式的文件夾中,並且可通過IMAP4郵件主機同步客戶文件。客戶軟件和服務器相互配合,允許過濾來自特定地址的郵件,還能夠防止通過低速撥號鏈路下載大文件。用戶可以查看主機上的郵件報文,如果需要,可以決定把其中哪些內容下載到遠程連接的客戶機上。用戶還可以有選擇地下載郵件,而不必非要下載郵件的附件。 


IMAP與POP3及Web Mail的比較
金笛電子郵件系統是目前國內衆多電子郵件系統中率先提供IMAP4服務的系統,完整支持最新版本的IMAP4rev1(RFC2060)協議。IMAP是Internet Message Access Protocol的縮寫,顧名思義,主要提供的是通過Internet獲取信息的一種協議。IMAP4是IMAP協議的第4個版本,正如POP3是POP協議的第3個版本一樣。在AIMC郵件系統內,IMAP是一種強有力的郵箱訪問方式。
和POP3的區別
由於很多用戶都對POP3非常熟悉,我們就從POP3說起。POP3提供了快捷的郵件下載服務,用戶可以利用POP3把郵箱裏的信下載到PC上進行離線閱讀。一旦郵件進入PC的本地硬盤,就可以選擇把郵件從服務器上刪除,然後脫離與Internet的連接並選擇在任何時候閱讀已經下載的郵件。
IMAP同樣提供了方便的郵件下載服務,讓用戶能進行離線閱讀,但IMAP能完成的卻遠遠不只這些。首先,IMAP提供的摘要瀏覽功能可以讓你在閱讀完所有的郵件到達時間、主題、發件人、大小等信息後才作出是否下載的決定。也就是說,你不必等所有的郵件都下載完畢後才知道究竟郵件裏都有些什麼。如果你根據摘要信息就可以決定某些郵件對你毫無用處,你就可以直接在服務器上把這些郵件刪除掉,而不必浪費你寶貴的上網時間。如果你的IMAP客戶端軟件完整支持IMAP4rev1的話(如Netscape 4.5),則你還可以享受選擇性下載附件的服務。舉例來說,假如一封郵件裏含有大大小小共5個附件,而其中只有2個附件是你需要的,你就可以只下載那兩個附件,節省了下載其餘3個的時間。
和WebMail的比較
也有很多用戶喜歡通過Web來聯機收發郵件,其中一個很重要的原因是這些用戶希望把他的郵件都留在服務器上,並且通過WebMail服務建立多個文件夾,然後分類歸檔地管理自己的郵件。這樣,WebMail的用戶就可以不分時間地點,只要有一個瀏覽器就可以馬上從服務器上獲得自己的郵件,不管是剛收到的還是已經存放了很久,也不必擔心客戶端的PC重新安裝了操作系統或換了一臺電腦以後郵件全部丟失了的問題。
IMAP同樣滿足了WebMail用戶的需要。IMAP與POP3不同的地方關鍵是在支持離線閱讀的同時也鼓勵用戶把郵件存儲和組織在服務器上。和WebMail一樣,通過IMAP,允許用戶在服務器上建立任意層次結構的文件夾,並且可以靈活地在文件夾之間移動郵件,隨心所欲地組織你的郵箱(這些顯然是通過POP3做不到的)。只要你的郵件存儲在服務器上,任何時候通過一個IMAP的客戶端軟件都可以立即聯機獲得你的郵件,這一點與WebMail保持一致。
但是,IMAP的以下優點足以把WebMail用戶吸引過來:凡是WebMail的用戶都必需無奈地閱讀頁面上的廣告,都必需花費寶貴的時間和帶寬來下載頁面上的圖面,修飾字符等等;IMAP則忠實地只爲你的Email服務,不讓你的資源有絲毫的浪費。
IMAP的其它好處
IMAP協議還允許你方便地利用你的郵箱作爲信息存儲工具,一般的IMAP4客戶軟件都支持郵件在本地文件夾間和服務器文件夾間的隨意拖動,讓你得心應手地把本地硬盤上的文件存放到服務器上,然後在你需要的時候同樣方便地取回來,所有的功能僅需要一次鼠標拖放的操作來實現,是不是很好?
總的來說,POP3和WebMail的優點在IMAP裏都有,而IMAP卻能很好地克服POP3和WebMail各自的缺點。喜歡新鮮的你是不是也想試一試?


IMAP4協議處理狀態及工作流程
任何時候,每個IMAP4服務處理線程都處於4種處理狀態的其中一種。大部分的IMAP4命令都只會在某種處理狀態下才有效。如果IMAP4客戶端軟件企圖在不恰當的狀態下發送命令,則服務器將返回協議錯誤的失敗信息,如BAD或NO等等。
非認證狀態
在這個狀態下,客戶軟件必須發出認證請求命令。在IMAP4連接建立時,服務器處理線程自動進入這個狀態。
認證狀態
在認證狀態下,客戶軟件必須選擇一個郵箱。這個狀態在認證請求命令得到確認答覆後進入,或在預認證連接建立後直接進入。
已選擇狀態
這個狀態表示IMAP4客戶軟件已經選擇了某一Folder。在這個狀態下可以發送所有檢索郵件內容的命令。
離線狀態
在這個狀態,連接已經終止,服務器將關閉這個連接。客戶端軟件可以發出命令或由服務器強制進入這個狀態。


IMAP命令概要

IMAP協議中的命令與POP3中最大的不同是每條命令前都一有一個由Client指定的標籤,同一個會話中,Client發出的每條命令都會有不同的標籤;而Server對每個Client發出的命令都必須以相同的標籤作應答。這就使得IMAP會話中Client可以同時送出多個命令,而Server則完全可以併發處理這些命令,不必等待上一個命令執行完畢才處理下一個。


下面是若干常用的IMAP命令
<TAG> LOGIN <user name> <password>
LOGIN命令用於登錄IMAP服務器,與POP3顯著不同的是用戶名和口令同時作爲參數提交給Server,而POP3完成同樣的操作需要USER和PASS兩條命令。 
C: a001 LOGIN SMITH SESAME

S: a001 OK LOGIN completed


<TAG> CREATE <folder>
CREATE可以創建指定名字的文件夾。文件夾名字通常是帶路徑的文件夾全名。
C: A003 CREATE owatagusiam/
S: A003 OK CREATE completed
C: A004 CREATE owatagusiam/blurdybloop

S: A004 OK CREATE completed


<TAG> DELETE <folder>
DELETE命令刪除指定名字的文件夾。文件夾名字通常是帶路徑的文件夾全名。
C: A683 DELETE blurdybloop
S: A683 OK DELETE completed 
C: A684 DELETE foo
S: A684 NO Name "foo" has inferior hierarchical names
C: A685 DELETE foo/bar 

S: A685 OK DELETE Completed


<TAG> RENAME <old folder> <new folder>
RENAME命令可以修改文件夾的名稱。
C: A683 RENAME blurdybloop sarasoop
S: A683 OK RENAME completed
C: A684 RENAME foo zowie

S: A684 OK RENAME Completed


<TAG> LIST <BASE> <template>
LIST命令用於列出郵箱中已有的文件夾,有點像操作系統的列目錄命令。這個命令可以包含起始的路徑位置和需要列出的文件夾所符合的特徵,可以使用通配符"*"。
C: A101 LIST "" ""
S: * LIST (\Noselect) "/" ""
S: A101 OK LIST Completed
C: A102 LIST #news.comp.mail.misc ""
S: * LIST (\Noselect) "." #news.
S: A102 OK LIST Completed
C: A103 LIST /usr/staff/jones ""
S: * LIST (\Noselect) "/" /
S: A103 OK LIST Completed
C: A202 LIST ~/Mail/ %
S: * LIST (\Noselect) "/" ~/Mail/foo
S: * LIST () "/" ~/Mail/meetings
S: A202 OK LIST completed


<TAG> APPEND <folder> <attributes> <size> <mail data>
APPEND命令允許Client上載一個郵件到指定的Folder中。命令中包含了新郵件的屬性、大小,隨後是郵件數據。
C: A003 APPEND saved-messages (\Seen) {310}
C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
C: From: Fred Foobar <[email][email protected][/email]>
C: Subject: afternoon meeting
C: To: [email][email protected][/email]
C: Message-Id: <[email][email protected][/email]>
C: MIME-Version: 1.0
C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
C:
C: Hello Joe, do you think we can meet at 3:30 tomorrow?
C:
S: A003 OK APPEND completed


<TAG> SELECT <folder>
SELECT命令讓Client選定某個Folder,表示即將對該Folder內的郵件作操作。
C: A142 SELECT INBOX
S: * 172 EXISTS
S: * 1 RECENT
S: * OK [UNSEEN 12] Message 12 is first unseen
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * OK [PERMANENTFLAGS (\Deleted \Seen \*)] Limited
S: A142 OK [READ-WRITE] SELECT completed


<TAG> FETCH …
FETCH命令是IMAP協議裏最複雜的命令。FETCH的命令參數很多、很複雜,難以一一列舉,但基本的特徵是允許將郵件按照MIME結構拆解爲零碎的部件來提取。例如,可以利用FETCH命令提取郵件頭、某一個附件、或某一郵件附件頭部的某一字段,等等。


<TAG> STORE <mail id> <new attributes>
STORE命令用於修改指定郵件的屬性,包括給郵件打上已讀標記、刪除標記,等等。
C: A003 STORE 2:4 +FLAGS (\Deleted)
S: * 2 FETCH FLAGS (\Deleted \Seen)
S: * 3 FETCH FLAGS (\Deleted)
S: * 4 FETCH FLAGS (\Deleted \Flagged \Seen)
S: A003 OK STORE completed


<TAG> CLOSE
CLOSE命令表示Client結束對當前Folder的訪問,隨後可以SELECT另一Folder。
C: A341 CLOSE
S: A341 OK CLOSE completed


<TAG> EXPUNGE
EXPUNGE將郵箱中所有打了刪除標記的郵件徹底刪除。EXPUNGE刪除的郵件將不可以恢復。 
C: A202 EXPUNGE
S: * 3 EXPUNGE
S: * 3 EXPUNGE
S: * 5 EXPUNGE
S: * 8 EXPUNGE
S: A202 OK EXPUNGE completed


<TAG> LOGOUT
LOGOUT命令結束本次IMAP會話。
C: A023 LOGOUT
S: * BYE IMAP4rev1 Server logging out
S: A023 OK LOGOUT completed
(Server and client then close the connection)


IMAP4會話實例
S: * OK IMAP4rev1 Service Ready
C: a001 login mrc secret
S: a001 OK LOGIN completed
C: a002 select inbox
S: * 18 EXISTS
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * 2 RECENT
S: * OK [UNSEEN 17] Message 17 is the first unseen message
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S: a002 OK [READ-WRITE] SELECT completed
C: a003 fetch 12 full
S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700"
RFC822.SIZE 4286 ENVELOPE ("Wed, 17 Jul 1996 02:23:25 -0700 (PDT)" "IMAP4rev1 WG mtg summary and minutes" 
(("Terry Gray" NIL "gray" "cac.washington.edu")) 
(("Terry Gray" NIL "gray" "cac.washington.edu")) 
(("Terry Gray" NIL "gray" "cac.washington.edu")) 
((NIL NIL "imap" "cac.washington.edu")) 
((NIL NIL "minutes" "CNRI.Reston.VA.US") 
("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL "<[email][email protected][/email]>") 
BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92)) 
S: a003 OK FETCH completed
C: a004 fetch 12 body[header]
S: * 12 FETCH (BODY[HEADER] {350}
S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
S: From: Terry Gray <[email][email protected][/email]>
S: Subject: IMAP4rev1 WG mtg summary and minutes
S: To: [email][email protected][/email]
S: cc: [email][email protected][/email], John Klensin <[email][email protected][/email]>
S: Message-Id: <[email][email protected][/email]>
S: MIME-Version: 1.0
S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
S:
S: )
S: a004 OK FETCH completed
C: a005 store 12 +flags \deleted
S: * 12 FETCH (FLAGS (\Seen \Deleted))
S: a005 OK +FLAGS completed
C: a006 logout
S: * BYE IMAP4rev1 server terminating connection
S: a006 OK LOGOUT completed


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章