用語辞典・通信プロトコル

POP3

POP3とは

POP3は、メールをサーバーから端末へ受信し、通常は端末側で管理するプロトコルです。正式名称はPost Office Protocol - Version 3(ポスト・オフィス・プロトコル・バージョン・スリー)で、ポップスリーと読みます。

メールサーバーのメール格納先へ接続し、一覧を調べ、必要なメッセージ全体を端末へ取得します。受信後にサーバーから削除する運用が基本形ですが、クライアント設定で一定期間または常にサーバーへ残すこともできます。

DELEコマンドはその場でメールを消すのではなく、現在のセッションで削除予定に印を付け、TRANSACTION状態からQUITしてUPDATE状態へ正常に入ったときに削除を確定します。

認証後に一覧とメールを端末へ取り込み、削除予定を付けて正常終了時に確定する接続断ではUPDATEへ入らないため、削除予定は確定せず次回に残る
POP3クライアントが認証してメールドロップを開き、一覧、メッセージ、永続識別タグを取得し、削除予定を付け、正常なQUIT後にサーバーから削除する一方、接続断時は印が破棄され、複数端末のフォルダー状態を同期しないことを示す図解
図1「サーバーへ残す」はPOP3サーバーのフォルダー同期機能ではなく、クライアントがDELEを送る時期を調整する運用です。

三つの状態を進み、UPDATEで削除を確定する

同じコマンドでも、現在の状態によって有効・無効が変わる切断とQUITを区別すると、削除済みメールが再び届く理由を追える
  1. Authorize
    利用者を認証

    接続後にTLSと認証を済ませ、対象メール格納先を排他的に開く

  2. Inspect
    件数と一覧を調査

    STAT、LIST、UIDLなどでメッセージ番号、サイズ、永続識別子を得る

  3. Retrieve
    メッセージを取得

    RETRでヘッダーと本文を端末へ保存し、保存結果を確認する

  4. Mark
    削除予定を付与

    DELEは現在のセッション内で削除対象へ印を付け、RSETで戻せる

  5. Update
    QUITで削除を確定

    正常終了時に印付きメッセージを削除し、メール格納先のロックを解放する

  6. Abort
    異常切断は未確定

    UPDATEへ入らず切れた場合、サーバーは印付きメッセージを削除しない

図2サーバー側の保存方針により別の削除が行われる場合はありますが、POP3セッションのDELE確定規則とは区別します。

メッセージ番号は接続中の位置、UIDLは接続をまたぐ識別子

POP3サーバーはメール格納先を開くと、現在のメッセージへ1から始まる番号を割り当てます。この番号はセッション内で使う位置で、メールが追加・削除された次回接続でも同じとは限りません。

UIDL拡張は、メール格納先内でメッセージを継続して識別するunique-idを返します。クライアントは取得済みUIDLを記録し、サーバーへ残したメールを毎回再取得しないようにします。UIDLが変わる移行やサーバー再構築では重複受信が起こり得ます。

RETRでメッセージ全体を取得し、端末保存に成功してから削除する

LISTはメッセージ番号とサイズ、RETRは指定メッセージのヘッダー・本文全体を返します。TOP拡張でヘッダーと本文先頭だけを確認できる場合もありますが、対応はCAPAで確かめます。

クライアントはローカル保存、索引作成、必要なウイルス検査に成功してからDELEを送ります。保存前に削除予定へすると、ディスク不足やアプリ異常と正常QUITが重なってメールを失う危険があります。受信、端末保存、サーバー削除を三つの完了として記録します。

「サーバーにコピーを残す」は、複数端末の同期にはならない

複数端末が同じメール格納先から取得できても、POP3はフォルダー移動、既読、スター、下書き、送信済みなどをサーバー上で同期しません。各端末がUIDLとローカル状態を別々に持ちます。

一台が削除すると他端末が取得できず、削除しなければサーバー容量が増えます。「取得後何日で削除」というクライアント別設定も競合します。複数端末で同じ状態を扱う用途はIMAPが適します。

削除予定はRSETで戻せ、異常切断では実行されない

TRANSACTION状態でDELEした後、RSETを送ると、そのセッションで付けた削除予定を解除できます。QUITが正常に処理されUPDATEへ入ると、サーバーは削除を試み、メール格納先を解放します。

回線断、タイムアウト、クライアント強制終了ではUPDATEへ入らず、削除してはいけません。そのため次回、端末保存済みのメールがサーバーに残って見える場合があります。UIDL記録が保存されていれば重複取得を避けられます。

TLSで認証情報とメール内容を保護する

平文POP3は通常TCPポート110を使い、USER・PASSやメール内容が保護されません。現行のメールアクセスでは、接続直後からTLSを使うポート995が推奨され、証明書の接続先名を検証します。

ポート110でSTLSによりTLSへ切り替える方式もありますが、クライアントがTLS必須として失敗時に平文へ戻らない設定が必要です。POP3の暗号化は取得区間を守るもので、受信前のSMTP中継や端末保存後のディスクを自動では守りません。

仕様の確認資料:RFC 1939「Post Office Protocol - Version 3」RFC 2449「POP3 Extension Mechanism」RFC 8314「Cleartext Considered Obsolete」

関連用語