TCP/IP 與 Internet 網路:第十四章 電子郵件系統 上一頁 下一頁
14-6 IMAP 協定
『交談式郵件存取協定』(Interactive Mail Access Protocol, IMAP)是提供客戶端電腦和郵件伺服器之間通訊使用,讓使用者直接登入郵件伺服器,從事郵件存取的工作(閱讀或刪除)。IMAP 和 POP3 有很大的不同點,前者是直接在郵件伺服器上處理信件;而後者是直接將信件下載到客戶端電腦,使用者再由客戶端電腦處理信件。一般情況,當 POP3 將信件下載到客戶電腦後,便會立即清除伺服器上的郵件,但有些使用者在世界各地環遊當中,必需隨時查閱自己信箱裡的信件,查閱時並非使用自行電腦來連接伺服器,當然也不希望信件下載到他人電腦上,此時便需要利用 IMAP 協定來連接郵件伺服器。一般郵件伺服器都有提供 POP3 和 IMAP 協定,讓客戶選擇使用。IMAP 協定功能如圖 14-7 所示。
圖 14-7 IMAP 協定功能
時下 IMAP 的最新版本是 Version 4,也稱之為『IMAP4』,是根據 RFC 1730 制定的標準規範,但目前 Linux 系統上大多使用第二版本(IMAP2),標準規範為 RFC 1176。IMAP 的連結方式也如同一般 Internet 應用系統一樣,採用 NVT ASCII 終端系統方式,連接埠口位於 143/tcp。
IMAP 協定的交談命令和一般系統有點不同,客戶端在下達命令之前必須給予一個標籤號碼(Tag),伺服端再依照該標籤號碼回應,常用之命令如下:
◆ tag NOOP:無動作,測試伺服器是否工作正常。
◆ tag LOGIN user password:使用者登入 IMAP 伺服器。
◆ tag LOGOUT:登出郵件伺服器。
◆ tag SELECT mailbox:選擇使用之郵件信箱,一般都以登入使用者的收信信箱(INBOX)。
◆ tag FETCH sequence data:攫取信件,如 tag FETCH 1 all,表示讀取第一封信件(1)的全部內容(all)。
◆ tag BROAD bulletin_board:廣播到 BBS 看板。
◆ tag EXPUNGE:刪除已擷取(Fetch)的信件。
◆ tag COPY sequence mailbox:複製信件(sequence)到另一個信箱(mailbox)。
◆ tag STORE sequence data value:儲存某些資料到信件內。
當伺服端收到命令,可能會回應下列訊息之一給客戶端:(節錄部分)
▼ tag OK text:執行正常,其中 tag 為下達命令時所附的標籤號碼,text 為回應說明。
▼ tag NO text:命令無法執行。
▼ tag BAD text:命令結構錯誤,無法辨識。
▼ * number message_data:訊息說明。
▼ * BYE text:通訊結束說明。
以下範例是由 linux-1 主機上連接到郵件伺服器(linux-2),並以 tsnien 名稱登入,來處理信件的操作範例,其中粗體加底線的文字為客戶端輸入的命令,其它文字是由伺服端所回應的訊息。
[tsnien@linux-1 root]$ telnet linux-2.cu.edu.tw 143 Trying 163.15.2.30... Connected to linux-2.cu.edu.tw. Escape character is '^]'. * OK [CAPABILITY IMAP4 IMAP4REV1 STARTTLS LOGIN-REFERRALS AUTH=LOGIN] linux-2.cu .edu.tw IMAP4rev1 2000.287rh at Wed, 7 Aug 2002 17:44:31 +0800 (CST) a200 login tsnien ks3456 (登入郵件伺服器) * CAPABILITY IMAP4 IMAP4REV1 STARTTLS NAMESPACE IDLE MAILBOX-REFERRALS SCAN SORT THREAD=REFERENCES THREAD=ORDEREDSUBJECT MULTIAPPEND a200 OK LOGIN completed a201 select inbox (選擇收信信箱) * 2 EXISTS * 0 RECENT * OK [UIDVALIDITY 1028713376] UID validity status * OK [UIDNEXT 3] Predicted next UID * FLAGS (\Answered \Flagged \Deleted \Draft \Seen) * OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)] Permanent fl ags * OK [UNSEEN 1] first unseen message in /var/spool/mail/tsnien a201 OK [READ-WRITE] SELECT completed a202 fetch 1 all (攫取第一封信件) * 1 FETCH (FLAGS () INTERNALDATE " 7-Aug-2002 17:41:50 +0800" RFC822.SIZE 591 EN VELOPE ("Wed, 7 Aug 2002 17:34:46 GMT" "test imap-1" ((NIL NIL "tsnien" "linux-2 .cu.edu.tw")) ((NIL NIL "tsnien" "linux-2.cu.edu.tw")) ((NIL NIL "tsnien" "linux -2.cu.edu.tw")) ((NIL NIL "tsnien" "linux-2.cu.edu.tw")) NIL NIL NIL "<200208071 734.RAA01167@linux-1.cu.edu.tw>")) a202 OK FETCH completed a203 expunge (刪除第一封信件) a203 OK No messages deleted, so no update needed a207 logout (登出郵件伺服器) * BYE linux-2.cu.edu.tw IMAP4rev1 server terminating connection a207 OK LOGOUT completed Connection closed by foreign host |