POP3 クライアントを作ってみよう(1)

前へ << HTTP クライアントを作ってみよう(6) - Digest 認証編 - POP3 クライアントを作ってみよう(2) >> 次へ

POP3 とは?

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 で試してみよう

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 コマンドで通信終了
という動作をしているわけです。
前へ << HTTP クライアントを作ってみよう(6) - Digest 認証編 - POP3 クライアントを作ってみよう(2) >> 次へ

ご意見・ご指摘は Twitter: @68user までお願いします。