協議基礎:使用Telnet學習IMAP協議

IMAP 介紹

IMAP 全稱是 Internet Mail Access Protocol,即交互式郵件存取協議,它是跟 POP3 相似郵件訪問標準協議之一。不一樣的是,開啓了 IMAP 後,您在電子郵件客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操做都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會作相應的動做。因此不管從瀏覽器登陸郵箱或者客戶端軟件登陸郵箱,看到的郵件以及狀態都是一致的。

與POP3的差別你們能夠看這裏html

郵件協議包括SMTPPOP3IMAP。因爲SMTPPOP3這兩個協議網絡上介紹的比較多,包括命令的使用和PHP代碼的使用均可以搜的到,因此這篇文章主要講解怎麼樣使用命令來操做IMAPgit

想了解怎麼用命令來操做SMTPPOP3的朋友能夠移步到如下兩個地址github

  1. 郵件實現詳解(二)------手工體驗smtp和pop3協議
  2. 協議基礎:SMTP:使用Telnet學習SMTP協議

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
     ...
  • 命令格式bash

    命令輸入:
      <隨機字符串ID> command
    響應:
      <隨機字符串ID> OK <ANSWER DETAIL>
      
    例如:
      A1 login test@qq.com 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 test@qq.com 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>ui

    $ A1 LOGIN test@qq.com password
      A1 OK Success login ok
  • 列出郵件文件夾
    LIST "<mailbox path>" "<search argument>"code

    1. <mailbox path> 郵箱路徑,若是爲" ", 則列出根目錄的全部文件夾
    2. <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

須要注意的是:

  1. IMAP的命令使用與POP3相似,主要的區別在於登陸認證。
  2. 在用PHP作郵箱檢測時,能夠藉助上面的方式來實現。PHP檢測部分我已經寫好了代碼,能夠在github上查看。
  3. 還能夠獲取服務器中的全部郵件
相關文章
相關標籤/搜索