POP3 についてあまり詳しくない人のために、メール送信・受信の流れを説明します。よくメール送受信のサーバを「メールサーバ」と呼びますが、 この表現にはちょっと語弊があります。なぜならメール送信とメール受信の サーバソフトウェアは全く別だからです。メール送信用サーバを SMTP サーバ、 メール受信用サーバを POP サーバ、あるいは POP3 (POP Version 3) サーバと言います。
SMTP = Simple Mail Transfer Protocol、POP = Post Office Protocol です。 メーラー(メールソフト)の設定で SMTP サーバと POP3 サーバの設定はしているはずです。 例えば Netscape Navigator 3.04 なら Options -> Mail and News Preferences -> Servers で SMTP サーバ名と POP3 サーバ名、自分のユーザ名を指定できます。sender@from.com さんが receiver@to.com 宛にメールを送る場合を考えてみましょう。sender@from.com さんの SMTP サーバは smtp.from.com、 receiver@to.com さんの POP3 サーバは pop3.to.com だとします。
sender@from.com さんが receiver@to.com さんにメールを送信すると、 メールは smtp.from.com で動いている SMTP サーバ宛に送られます。 smtp.from.com の SMTP サーバは、宛先が receiver@to.com 宛となっているので to.com の SMTP サーバに向けてメールを転送します。to.com の SMTP サーバがメールを受け取ると、 receiver さん宛のメールであることを確認して receiver さんのメールボックスに メールを格納します。
ここでいうメールボックスとは、SMTP サーバの動いているマシンのファイルです (大抵の場合、/var/mail/receiver か /var/spool/mail/receiver)。ここまでは全て SMTP サーバがメールを中継してきました。 POP3 というのは、メールボックス (SMTP サーバの中のファイル) を 自宅の PC に転送するためのシステムです。つまりメールボックス の中のメールを、自宅の PC に転送するプログラムを今から書こう というわけです。
この説明は簡略化したものです。実際のメールの流れは MX フィールドなどが絡んでくるのでもう少し複雑ですが、 POP3 クライアントを作る際の知識としては、これで十分でしょう。
telnet を使って、POP3 サーバからメールをもらってきましょう。 赤の他人に勝手にメールを見られては困るので、POP3 サーバに アクセスする際にはユーザ名とパスワードによる認証が必要になります。POP3 サーバ名が pop3.foo.com で、あなたのユーザ名が hogehoge、 パスワードが secret だとします。POP3 のポート番号は 110 と決まっているので、 telnet で pop3.foo.com の ポート 110 に接続します。
% telnet pop3.foo.com 110 +OK QPOP (version 2.3+youbin) at pop3.foo.com starting. <10005.897840800@pop3.foo.com> USER hogehoge +OK Password required for hogehoge. PASS secret +OK hogehoge has 6 messages (10211 octets).POP3 サーバに接続すると、まず「USER ユーザ名」、「PASS パスワード」 という文字列を送信しなければいけません。ここで間違ったパスワードを 打つとメールは読めません。ユーザ認証に成功すると、 何通のメールが届いているか表示されます。 この場合は 6 通で、6 通の合計の長さは 10211 バイトであることがわかります (octet = byte です)。また、LIST コマンドを使うと、各メールの長さ(バイト数)が POP3 サーバから送られてきます。
LIST +OK 6 messages (10211 octets) 1 1518 2 1612 3 1636 4 1486 5 1631 6 2328 .メールの内容を得るには「RETR メール番号」というコマンドを送ります。 メール番号というのは LIST コマンドで表示された番号です。RETR 1 +OK 1518 octets …(1番のメールの内容)… .サーバからメールを削除するには「DELE メール番号」とします。DELE 1 +OK Message 1 has been deleted本当に DELE コマンドを使うとメールが消えてしまうので、 ここでは試さない方がいいでしょう。QUIT コマンドでサーバとの通信を終了できます。
QUIT +OK Pop server at pop3.foo.com signing off.
大体理解できましたか? メーラーが POP3 サーバからメールを取ってくる場合、という動作をしているわけです。
- USER・PASS コマンドによってユーザ認証を行う。
- LIST コマンドでメール一覧を受け取る。
- それから各メールについて、
- RETR コマンドでメールの内容を受け取り、
- DELE コマンドでメールをサーバから削除する。
- QUIT コマンドで通信終了