POP3とは
POP3は、メールをサーバーから端末へ受信し、通常は端末側で管理するプロトコルです。正式名称はPost Office Protocol - Version 3(ポスト・オフィス・プロトコル・バージョン・スリー)で、ポップスリーと読みます。
メールサーバーのメール格納先へ接続し、一覧を調べ、必要なメッセージ全体を端末へ取得します。受信後にサーバーから削除する運用が基本形ですが、クライアント設定で一定期間または常にサーバーへ残すこともできます。
DELEコマンドはその場でメールを消すのではなく、現在のセッションで削除予定に印を付け、TRANSACTION状態からQUITしてUPDATE状態へ正常に入ったときに削除を確定します。

三つの状態を進み、UPDATEで削除を確定する
- Authorize利用者を認証
接続後にTLSと認証を済ませ、対象メール格納先を排他的に開く
- Inspect件数と一覧を調査
STAT、LIST、UIDLなどでメッセージ番号、サイズ、永続識別子を得る
- Retrieveメッセージを取得
RETRでヘッダーと本文を端末へ保存し、保存結果を確認する
- Mark削除予定を付与
DELEは現在のセッション内で削除対象へ印を付け、RSETで戻せる
- UpdateQUITで削除を確定
正常終了時に印付きメッセージを削除し、メール格納先のロックを解放する
- Abort異常切断は未確定
UPDATEへ入らず切れた場合、サーバーは印付きメッセージを削除しない
メッセージ番号は接続中の位置、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」