IMAP 介紹
IMAP
全稱是 Internet Mail Access Protocol,即交互式郵件存取協議,它是跟 POP3 類似郵件訪問標準協議之一。不同的是,開啓了 IMAP 後,您在電子郵件客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操作都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會做相應的動作。所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態都是一致的。
與POP3的差異大家可以看這裏
郵件協議包括SMTP,POP3,IMAP。由於SMTP和POP3這兩個協議網絡上介紹的比較多,包括命令的使用和PHP代碼的使用都可以搜的到,所以這篇文章主要講解怎麼樣使用命令來操作IMAP。
想了解怎麼用命令來操作SMTP和POP3的朋友可以移步到以下兩個地址
IMAP 命令詳解
-
端口 143/993 (telnet/SSL)
Port 143 (plain / no SSL) // 非SSL telnet <IP> 143 .... Port 993 (SSL) // SSL openssl s_client -connect <IP>:993 CONNECTED(00000003) depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain ...
-
命令格式
命令輸入: <隨機字符串ID> command 響應: <隨機字符串ID> OK <ANSWER DETAIL> 例如: A1 login [email protected] password A1 OK login successful
A1 即是
<隨機字符串ID>
,可以是你定義的任何字符串,同時返回的文本也帶有這個字符串。非 SSL 示例
$ telnet imap.qq.com 143 \* OK [CAPABILITY IMAP4 IMAP4rev1 ID AUTH=LOGIN NAMESPACE] QQMail IMAP4Server ready A1 LOGIN [email protected] password A1 OK Success login ok A1 LIST "" "*" \* LIST (\NoSelect \HasChildren) "/" "&UXZO1mWHTvZZOQ-" \* LIST (\HasNoChildren) "/" "INBOX" \* LIST (\HasNoChildren) "/" "Sent Messages" \* LIST (\HasNoChildren) "/" "Drafts" \* LIST (\HasNoChildren) "/" "Deleted Messages" \* LIST (\HasNoChildren) "/" "Junk" \* LIST (\HasNoChildren) "/" "&UXZO1mWHTvZZOQ-/QQ&kK5O9ouilgU-" \* LIST (\HasNoChildren) "/" "&UXZO1mWHTvZZOQ-/&jURukA-" \* LIST (\HasNoChildren) "/" "&UXZO1mWHTvZZOQ-/&kK5O9l9SaGM-" \* LIST (\HasNoChildren) "/" "&g0l6Pw-"
SSL示例
$ openssl s_client -crlf -connect imap.qq.com:993 ... \* OK [CAPABILITY IMAP4 IMAP4rev1 ID AUTH=LOGIN NAMESPACE] QQMail IMAP4Server ready
-
登錄認證
ID LOGIN <EMAIL> <PASSWORD>
$ A1 LOGIN [email protected] password A1 OK Success login ok
-
列出郵件文件夾
LIST "<mailbox path>" "<search argument>"
-
<mailbox path>
郵箱路徑,如果爲" ", 則列出根目錄的所有文件夾 -
<search argument>
是區分大小寫的,可爲 “” 或 “%”,“”匹配所有,“%”只匹配當前層$ A1 LIST "" "*"
-
-
選擇一個文件夾
$ A1 SELECT INBOX \* 1254 EXISTS // 共存在1254封郵件 \* 0 RECENT // 最新的郵件 \* OK [UNSEEN 75] // 未讀 \* OK [UIDVALIDITY 1429146575] UID validity status \* OK [UIDNEXT 2475] Predicted next UID \* FLAGS (\Answered \Flagged \Deleted \Draft \Seen) \* OK [PERMANENTFLAGS (\* \Answered \Flagged \Deleted \Draft \Seen)] Permanent flags A1 OK [READ-WRITE] SELECT complete
需要注意的是:
- IMAP的命令使用與POP3類似,主要的區別在於登錄認證。
- 在用
PHP
做郵箱檢測時,可以藉助上面的方式來實現。PHP
檢測部分我已經寫好了代碼,可以在github
上查看。 - 還可以獲取服務器中的所有郵件