RFC 1939: POP3 — 郵便プロトコルバージョン3
これが存在する理由
初期のインターネットでは、ほとんどのユーザーは常時接続していませんでした。ダイアルアップ接続は遅く、高額でした。メールアーキテクチャは2つの役割に分かれました:
- MTA(メール転送エージェント): SMTP経由でメールを受け取りキューに入れる常時稼働サーバー。
- MUA(メールユーザーエージェント): 蓄積されたメールを取得するために定期的に接続するクライアントアプリケーション。
POP3はそのギャップを埋めます。これはクライアントが認証を行い、メッセージをリストアップし、ダウンロードし、オプションでサーバーから削除するためのシンプルで状態を持たない方法を提供します。最小限のコードで低リソースマシンに実装可能なように設計されました。POP3は現在、世界中で最も広くサポートされているメールアクセスプロトコルの1つです。
どのように機能するか
接続と状態
POP3セッションは3つの順序のある状態を経ます:
- 認可: クライアントが接続し(ポート110、またはTLS暗黙のためのポート995)、ユーザー名とパスワードで認証します。
- トランザクション: クライアントはメッセージのリストアップ、取得、削除マークのためのコマンドを発行します。
-
更新: クライアントは
QUITを送信します。サーバーはすべての保留中の削除を実行し、接続を閉じます。
典型的なPOP3セッション
-- クライアントがポート995(POP3S)に接続 -- +OK POP3サーバーは準備完了 USER alice@example.com +OK PASS s3cretP@ss +OK ログイン完了。 -- 現在トランザクション状態 -- STAT +OK 3 12400 ← 3つのメッセージ、合計12400オクテット LIST +OK 3つのメッセージ 1 4200 2 3800 3 4400 . RETR 1 ← メッセージ1をダウンロード +OK 4200オクテット (フルRFC 5322メッセージコンテンツ...) . DELE 1 ← メッセージ1を削除マーク +OK 削除しました。 QUIT +OK さようなら。 ← サーバーは今メッセージ1を削除
コアPOP3コマンド
| コマンド | 状態 | 目的 |
|---|---|---|
USER / PASS
|
認可 | ユーザー名とパスワードで認証 |
APOP |
認可 | チャレンジレスポンス認証(パスワードをクリアテキストで送信することを回避) |
STAT |
トランザクション | メッセージ数と合計サイズを取得 |
LIST |
トランザクション | メッセージ番号とサイズをリストアップ |
RETR |
トランザクション | 番号でフルメッセージを取得 |
DELE |
トランザクション | 削除するメッセージをマーク |
NOOP |
トランザクション | セッションを活かしておく |
RSET |
トランザクション | 削除マークされたすべてのメッセージをアンマーク |
TOP |
トランザクション | ヘッダーとボディのn行を取得 |
UIDL |
トランザクション | ユニークIDリストを取得(既にダウンロードされたメッセージを追跡するために使用) |
QUIT |
任意 | セッションを終了。更新状態をトリガー |
主要な技術詳細
ダウンロードして削除 vs. サーバーに保持
POP3のデフォルトモデルはダウンロードして削除です。クライアントはRETRで各メッセージを取得し、DELEでマークし、QUIT時にサーバーが削除します。多くのクライアントは「メッセージをサーバーに保持」オプションを提供しており、単にDELEステップをスキップします。UIDLコマンドはユニークIDを提供するため、クライアントはメッセージを再ダウンロードせずに既にダウンロード済みのメッセージを追跡できます。
ロック
POP3はメールボックスに排他的ロックが必要です。1つのクライアントのみが一度にPOP3メールボックスにアクセスできます。最初のクライアントがトランザクション状態にある間に2番目のクライアントが接続しようとすると、拒否されます。これはPOP3をマルチデバイスアクセスに不適切にしています。
フォルダなし、フラグなし、検索なし
POP3はメールボックスを番号付きメッセージのフラットなリストと見なします。フォルダ、ラベル、既読/未読フラグ、またはサーバーサイド検索の概念はありません。サーバーは純粋にメッセージストアです。すべての整理はクライアント側で行われます。これはIMAPとPOP3の根本的な違いです。
セキュリティ:APOPとTLS
元のUSER/PASS認証はパスワードをクリアテキストで送信します。APOPは共有シークレットMD5チャレンジを使用してこれを回避しますが、MD5は現在暗号学的に破られたと見なされています。モダンPOP3は常にポート995でのTLS暗黙実行(RFC 8314に従う)か、フォールバックとしてSTLS(POP3版のSTARTTLS)を使用すべきです。
一般的な誤り
- 複数のデバイスでPOP3を使用する。 POP3はダウンロードして削除するため、電話とラップトップはメッセージを争います。各メッセージは1つのデバイスのみが見ます。代わりにIMAPまたはJMAPを使用してください。
- TLSなしでポート110上でPOP3を実行する。 認証情報とメッセージコンテンツはネットワーク上をクリアテキストで送信されます。常にポート995でTLS暗黙実行を使用してください。
- セキュリティのためにAPOPに頼る。 APOPはMD5を使用します。これは衝突と原像攻撃に対して脆弱です。TLSが唯一の確実な保護です。
- 「サーバーに保持」モードでUIDLを使用しない。 UIDLなしでは、「サーバーに保持」モードのクライアントは既にダウンロード済みのメッセージを確認する確実な方法がなく、再接続後に重複が発生します。
-
QUITなしで接続を切断する。 クライアントが
QUITを送信せずに接続をドロップすると、サーバーは更新状態に入りません。保留中のDELEコマンドは破棄されます。削除されたと思われたメッセージが再度表示されます。 - サーバーサイド機能を期待する。 POP3には検索、フラグ、フォルダがありません。アプリケーションがこれらのいずれかが必要な場合、POP3は間違ったプロトコルです。
配信性への影響
- POP3は取得プロトコルであり、送信プロトコルではありません。 送信メールが受信トレイに到達するかどうかに直接的な影響はありません。ただし、送信したメールを受信者がどのように操作するかに影響します。
- 既読確認と追跡。 POP3クライアントはオフライン読みのためメッセージをダウンロードします。オープン追跡ピクセルはユーザーがローカルクライアントでメッセージを開くまで動作しないかもしれません(ユーザーがリモート画像を読み込む場合)。
-
バウンス処理。 POP3を使用してバウンスメールボックスをポーリングする場合、
UIDLを使用してバウンスを再処理しないようにしてください。リスト衛生のためバウンスをタイムリーに処理するため、ポーリング間隔が十分に頻繁であることを確認してください。 - 受信トレイの配置。 POP3クライアントを使用する受信者は、フラットな受信トレイにすべてのメッセージを受け取ります。サーバーサイドスパムフィルタリングはありません(POP3アクセス前にサーバーがフィルタリングしない限り)。これはメッセージの可視性が高くなる、または受信者が圧倒されていると感じた場合、より多くのクレームが発生する可能性があります。