Lesson3ではメールの受信に使うPOP3について詳しく見ていく。受信操作の大まかな流れに加えて,未読メールだけを選別して受信するしくみも押さえておきたい。

やりとりには3段階ある

 POP3でのやりとりには,「認証」,「トランザクション」,「アップデート」という三つの段階がある(図3-1)。ちなみに,Lesson2で説明したSMTPのやりとりはトランザクションのみにあたる。POP3にはSMTPにはなかった認証とアップデートがあるのが特徴だ。

図3-1●POP3でのやりとりの流れ
図3-1●POP3でのやりとりの流れ
POP3でメールを受信するときは,ユーザーの認証後,メールの一覧を表示したり,メールを取り込んだり,削除したりするコマンドを実行する。図ではLIST,RETRというコマンドだけを実行しているが,各コマンドの実行順序は決められていない。POP3はRFC1939で規定されている。

 では,3段階の動作を一つずつ説明していこう。POP3ではまず,メーラーがメール・サーバーに対してTCPの110番ポートで接続する。続いて「認証」が始まる。認証では,アクセスしてきたユーザーがサーバーに登録されているかどうかを,メール・サーバーがユーザー名とパスワードでチェックする。このとき,メーラーがUSERコマンドでユーザー名を,PASSコマンドでパスワードを送信する。

 ただし,PASSコマンドで送るパスワードは暗号化されないので,ネットワークを流れるパケットをキャプチャして中身をのぞいてみるとパスワードがわかってしまう。このため,企業やプロバイダによってはパスワードを暗号化して送信するAPOPという認証方式を採用している場合がある。APOPを使うには,メーラーとメール・サーバーの両方が対応していなければならない。

受信操作の手順は決まっていない

 認証が無事にクリアできたら「トランザクション」という段階に移る。トランザクションでは,メールの一覧を表示したり,メールを取り込んだりなどのさまざまな動作をメール・サーバーに要求して実行する。トランザクションの終了を宣言するコマンド以外は,特に実行の順序は決められていない。

 図3-1では,メールの一覧を表示してから,メールを受信するというやりとりの例を示した。メールの一覧を表示するにはLISTコマンドを,実際にメールを取り込むためにはRETRコマンドを使う。LISTコマンドで取得できるのは,メールの通し番号と各メールのデータ・サイズ。メーラーは,その中からRETRコマンドでメールの番号を指定してメールを取り込む。メールを取り込んだら,QUITコマンドで終了する。

 最後の「アップデート」という段階では,メーラーから依頼された処理をメール・サーバー側で実行する。例えば,DELEコマンドで指示されたメールを削除するなどだ。これで受信の動作は完了する。

自動的に未読メールを取り出す

 もう一つ,メールを受信するときのしくみで知っておきたいことがある。それは,トランザクションの段階で,メール・サーバーに届いた新着メールを見分ける方法だ(図3-2)。図3-1の例では,LISTコマンドでメール・ボックスにあるすべてのメールの一覧を表示していたが,一般的には未読メールだけをチェックすることが多いだろう。

図3-2●UIDを比較して未読メールだけを受信する
図3-2●UIDを比較して未読メールだけを受信する
各メールの識別子であるUIDを使って未読メールだけを読み出せる。メール・サーバーが持っているUIDリストとメーラーが受信済みのメールのUIDを比較して,未読メールだけをメール・サーバーから取得する。

 未読メールかどうかを識別するには,個々のメールに付けられているUID(unique identifier)という識別子を利用する。メール・サーバーはUIDのリストを持っているので,メーラーはUIDLコマンドでUIDリストを要求する。そして既に受信したメールのUIDとUIDリストを比較し,まだ受け取ってないUIDのメールだけをメール・サーバーから取り出すのである。

 Lesson2とLesson3でSMTPとPOP3の基本的なしくみを見てきたが,両者で大きく異なるのは「認証」のしくみがあるかどうかという点だ。認証がないと,誰でも勝手にメール・サーバーを利用できてしまうので,迷惑メールの送信に利用されるケースがあった。そこで最近は,許可されたユーザーだけがメールを送信できるようにプロトコルを強化している。続くLesson4ではこうしたプロトコルの工夫を解説しよう。

■変更履歴
掲載当初,図3-1中の表「POP3のコマンドの例」の項目で「RTER」とありましたが,正しくは「RETR」です。お詫びして訂正します。表は修正済みです。 [2008/6/24]