3 分で読了 #networking #email-protocols
このページの目次

IMAP と POP3

POP3 はメールをローカルにダウンロードしてサーバーから削除し、IMAP はメールをサーバーに残して複数端末で同期します。IDLE により IMAP は「擬似プッシュ」を実現し、サーバーに新着メールが届くとクライアントに通知するため、ポーリングの必要がありません。

概要

SMTP はメールの転送のみを担当し、保存や読み取りは行いません。IMAP(1994年)と POP3(1988年)はメールアクセスプロトコルの2種類です。IMAP はメールをサーバー上に保持し、クライアントは単なる「ビュー」として機能し、複数デバイスでの自動同期、サーバー側での検索、IDLE によるリアルタイムプッシュが可能です。POP3 はよりシンプルで、メールをローカルにダウンロードし、サーバーからは削除します。IMAP がデフォルトの選択となっており、POP3 は特定のアーカイブ用途にのみ使用されます。

IMAP プロトコル

IMAP はステートフルプロトコルです。メールはサーバー上に保存され、クライアントはサーバー側のメールボックスに対して操作を行います。

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

メールボックスの一覧表示:
  C: a002 LIST "" "*"
  S: * LIST (\HasNoChildren) "/" INBOX
  S: a002 OK

メールボックスの選択:
  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 通目のメールの一部ヘッダーを取得

既読マーク:
  C: a005 STORE 1 +FLAGS (\Seen)

IDLE (リアルタイムプッシュ):
  C: a006 IDLE
  S: + idling
  (新着メール着信)
  S: * 43 EXISTS
  C: DONE
  S: a006 OK IDLE completed

POP3 との比較

IMAPPOP3
メール保存場所サーバー(クライアントはビュー)ローカルにダウンロード
複数デバイスメールが各デバイスに分散
検索サーバー側で SEARCHダウンロード後にローカルで検索
プッシュIDLE(リアルタイム)なし(ポーリング)
オフラインキャッシュが必要

参考

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

キーワード: IMAP, SELECT, FETCH, IDLE, POP3, Dovecot, mailbox, flag