本页目录
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 对比
| IMAP | POP3 | |
|---|---|---|
| 邮件存储 | 服务器 (客户端是 view) | 下载到本地 |
| 多设备 | ✓ | 邮件分散到各设备 |
| 搜索 | 服务器端 SEARCH | 下载后本地搜索 |
| 推送 | IDLE (实时) | 无 (轮询) |
| 离线 | 需缓存 | ✓ |
参考
- RFC: 3501, 2177, 1939
- Dovecot: dovecot.org
Keywords: IMAP, SELECT, FETCH, IDLE, POP3, Dovecot, mailbox, flag