POPとは
POP(Post Office Protocol、RFC1939)とは、メールサーバ(POPサーバ)上のメールボックスに貯まった自分宛てのメールを、メールクライアント(POPクライアント)に取り込むためのプロトコルです。
POPがサポートする機能はシンプルで、ユーザの認証、メールボックスに届いたメールの情報取得、メールの取り込みと削除などです。
現在はバージョン3(POP3)が主に使われており、バージョン1とバージョン2とは互換性はありません、そのため、以下はPOP3に限定して話しを進めます。
通信手順
POPでは、POPサーバに接続した後、3種類の状態を遷移することで手続きを行います。
- AUTHORIZATION状態
POPサーバに接続完了後の状態です。クライアントの認証が行われ、認証が成功すると、対象となるメールボックスが決定されます。 - TRANSACTION状態
クライアントの認証完了後の状態です。メールボックスの処理を行うことができます。 - UPDATE状態
QUITコマンドの発行後の状態です。消去マークが付けられたメッセージの削除とセッションの切断が行われます。
POPクライアントがコマンドを送り、それに対しPOPサーバがレスポンスを返す形でやり取りが行われます。
項 | POPクライアント | 方向 | POPサーバ |
① |
POPサーバへ接続(Connected to -) ー |
→ ← |
ー オープニングメッセージを応答 |
接続はTCPの110番ポートに対して行います。接続完了後はAUTHORIZATION状態に入ります。 | |||
② |
クライアントの認証情報[APOP] ー |
→ ← |
ー 認証情報の確認 |
クライアントの身元が確認できたら、確認の応答を行い、TRANSACTION状態に入ります。 | |||
③ |
情報取得[SAT/LIST/UIDL] ー |
→ ← |
ー 情報の送信 |
メールボックスに溜まったメールメッセージの数やサイズを取得します。 | |||
④ |
メールメッセージの取得[RETR] ー |
→ ← |
ー メールメッセージの送信 |
メールメッセージを番号を取得して、メールメッセージを取得します。複数ある場合は、複数回繰返します。 | |||
⑤ |
メールメッセージの削除[DELE] ー |
→ ← |
ー 確認を応答 |
不要なメールメッセージに消去マークを付けます。消去マークを付けたメールメッセージは、UPDATE状態に遷移した特に削除されます。 | |||
⑥ |
切断を要求[QUIT] | → | ー 確認を応答 (メールメッセージの削除実行) |
切断 | ← | ||
TRANSACTION状態を終了してUPDATE状態に遷移します。 |
尚、QUITコマンドでなく、タイムアウトでセッションが終了する場合は、UPDATE状態にはならず、メッセージの削除は行われません。
POPコマンド
POP3では、メールメッセージの取得や情報の確認などの操作を、コマンドによって行われます。尚、右側の列の「A」はAUTHORIZATION状態、「T」はTRANSACTION状態、「U」はUPDATE状態で使用可能であることを表します。
コマンド | 説明 | A | T | U |
USER | 基本認証を行う際のユーザ名の指定(オプション) | ○ | ||
PASS | 基本認証を行う際のパスワードの指定(オプション) | ○ | ||
APOP | APOP認証を行う。引数としてユーザ名とMD5ダイジェストを渡す(オプション) | ○ | ||
STAT | メールメッセージの数や全体のサイズなど、メールボックスに関する情報取得 | ○ | ||
LIST | メッセージサイズなどの、メッセージに関する情報取得 | ○ | ||
UIDL | メッセージのサーバ固有に一意な識別子(Unique ID)のリストアップ(オプション) | ○ | ||
RETR | メッセージ番号を指定してメッセージの取得 | ○ | ||
TOP | メッセージボディを指定行数取得(オプション) | ○ | ||
DELE | メッセージの消去マークの付加。DELEを実行しても直ぐには削除されない | ○ | ||
RSET | メッセージの消去マークの解除 | ○ | ||
QUIT | 切断の要求 | ○ | ○ | |
NOOP | 何もしない | ○ |
拡張コマンド
POP3で追加されたコマンドは以下になります。
コマンド | 説明 | RFC |
XTND | XTNDコマンドに拡張機能名を渡すことで拡張コマンドとして機能する。 | RFC1082 |
AUTH | AUTHコマンドの引数に認証機構名を渡すことで、認証機構の利用が可能。 | RFC1734 |
STSL | TLSプロトコルの利用することで、TSLによる暗号化が行われる。 | RFC2595 |
CAPA | 拡張サービス名、オプションコマンドなどの拡張機能のリストアップ。 | RFC2449 |
APOP認証
APOP(Authenticated POP)認証とは、POPのクライアント認証の際に、パスワードを平文で送らなくするための仕組みです。USERコマンドとPASSコマンドによる認証では、パスワードを平文で送るため、盗聴のリスクがあります。
APOP認証では、サーバから送られてきた一意な文字列と、元のパスワード(共有鍵)を組み合わせてMD5ダイジェストという文字列を生成し、これをAPOP認証のパスワードとして使用します。
POPクライアント | 方向 | POPサーバ |
- | ← | オープニングメッセージで一意な文字列を送付 |
MD5ダイジェストを計算 | - | MD5ダイジェストを計算 |
MD5ダイジェストを送信 | → | 両方のMDダイジェストが一致すれば認証完了 |
認証 | ← |
尚、APOP認証のパスワードは平文で送信されますが、MD5ダイジェストから元のパスワードを導き出すことはできないため、盗聴されても元のパスワードが漏れることはありません。