本页目录

IMAP 与 POP3

POP3 把邮件下载到本地然后删掉服务器上的,IMAP 把邮件留在服务器上多端同步。IDLE 让 IMAP 实现"伪推送"——服务器有新邮件就通知客户端,不用轮询。

概述

SMTP 只负责邮件传输,不负责存储和读取。IMAP(1994)和 POP3(1988)是两种邮件访问协议。IMAP 将邮件保存在服务器上,客户端只是"视图"——多设备自动同步、服务器端搜索、IDLE 实时推送。POP3 更简单:下载到本地、从服务器删除。IMAP 已经成为默认选择,POP3 仅用于特定归档场景。

IMAP 协议

IMAP 是状态化协议 — 邮件保存在服务器上,客户端操作服务器端 mailbox:

连接:
  S: * OK Dovecot ready.
  C: a001 LOGIN user@example.com password
  S: a001 OK Logged in

列出 mailbox:
  C: a002 LIST "" "*"
  S: * LIST (\HasNoChildren) "/" INBOX
  S: a002 OK

选择 mailbox:
  C: a003 SELECT INBOX
  S: * 42 EXISTS           ← 共 42 封
  S: * 5 RECENT             ← 新到 5 封
  S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
  S: * OK [UIDVALIDITY 1]
  S: * OK [UIDNEXT 43]      ← 下一封的 UID 是 43
  S: a003 OK [READ-WRITE] SELECT completed

取邮件:
  C: a004 FETCH 1:10 (FLAGS INTERNALDATE RFC822.SIZE BODY.PEEK[HEADER.FIELDS (FROM SUBJECT DATE)])
  → 拉取第 1-10 封的部分 headers

标记已读:
  C: a005 STORE 1 +FLAGS (\Seen)

IDLE (实时推送):
  C: a006 IDLE
  S: + idling
  (新邮件到达)
  S: * 43 EXISTS
  C: DONE
  S: a006 OK IDLE completed

与 POP3 对比

IMAPPOP3
邮件存储服务器 (客户端是 view)下载到本地
多设备邮件分散到各设备
搜索服务器端 SEARCH下载后本地搜索
推送IDLE (实时)无 (轮询)
离线需缓存

参考

  • RFC: 3501, 2177, 1939
  • Dovecot: dovecot.org

Keywords: IMAP, SELECT, FETCH, IDLE, POP3, Dovecot, mailbox, flag