なでしこ > Delphi > 戻る

POP3の通信

 TCP通信が一通り分かったところで、メールの受信を行ってみます。
■POP3とは
  ┣POP3の手順とコマンドの説明
■メールの受信プログラム

POP3とは

 メールの受信は、POP3というプロトコルを利用します。

 POP3でのユーザの認証は、ユーザ名とパスワードによって行われます。認証コマンドについてはRFC 1734として標準化されています。また、メールサーバからメールを受信するときのプロトコルは、RFC 1939(STD53)に標準仕様として記述されています。 

 RFCというのは、通信のインターネットの技術標準文書です。これに則って通信を行うようにします。

 メーラーで一番利用者の多いOutlookでも、初期のバージョンでは、一部RFCを無視した仕様が使われていたため、バッシングを受けたことがあるそうです。

→RFC1939の和訳

POP3の手順とコマンドの説明

 まず、クライアントがPOP3に接続すると、適当な一行のあいさつを返してきます。そして、クライアント側では、ユーザーとパスワードを送信します。

コマンド  説明  サーバーの応答
USER name  ユーザー名を指定する  +OK xxx か -ERR xxx
PASS string  パスワードを指定する  +OK xxx か -ERR xxx

 認証が終わると、以下のコマンドを使ってメールの一覧や本文の受信をすることができます。

コマンド  説明  サーバーの応答
STAT  一行でメール情報を返す  +OK (メール数) (トータルバイト数)
LIST  複数行でメールの一覧を得る  +OK xxx (改行) 1 (バイト数) (改行) 2 (バイト数)...
LIST msg  メッセージの情報を得る  +OK (msg) (バイト数)
RETR msg  メール本文の受信  +OK xxx(改行).まで本文
DELE msg  メールの削除の印をつける  +OK xxx または -ERR xxx
NOOP  何もせず肯定応答する  +OK xxx
RSET  削除の印を全部解除する  +OK
QUIT  削除の印をつけたメールを削除し操作の結果を返し接続をきる  +OK xxx または -ERR xxx

メールの受信プログラム

メールの受信をテストするのに、実際に稼動しているPOP3サーバーを使うと迷惑をかける恐れがあるので、実際にテストするには、ローカルにメールサーバーを立ててテストしてみましょう。

Windows 用のメールサーバーで便利なのが、BlackJumboDog で、以下より入手できます。

→BlackJumboDog

これは前回のスレッド通信のところでも見せましたが、再度手順を確認するためにプログラムを掲載します。

var
  tcp: TKTcpClient;
  s: string;
begin
  tcp := TKTcpClient.Create(nil);
  try
    tcp.Host := 'localhost'// ローカルのテストPOP3を使う
    tcp.Port := 110;
    tcp.Open; // POP3 サーバーと接続
    Writeln( tcp.recvln );
    tcp.sendln('USER test'); // ユーザーを送信
    Writeln( tcp.recvln );
    tcp.sendln('PASS test'); // パスワードを送信
    Writeln( tcp.recvln );
    tcp.sendln('LIST'); // メールの一覧を要求
    Writeln( tcp.RecvLn ); // 結果を取得
    Writeln( tcp.RecvLnToDot ); // 一覧を取得して表示
    tcp.sendln('RETR 1'); // メールの取得を要求
    Writeln( tcp.RecvLn ); // 結果を取得
    Writeln( tcp.RecvLnToDot ); // メールの結果を取得して表示
    tcp.sendln('DELE 1'); // メールの削除のしるしをつける
    Writeln( tcp.RecvLn ); // 結果を取得
    tcp.SendLn('QUIT'); // 実際に削除を実行
    Writeln( tcp.RecvLn ); // 削除の結果を取得
    tcp.Close;
  finally
    tcp.Free;
  end;
  readln;
end.

これでメール受信のだいたいの流れが分かりましたでしょうか。上のプログラムは、別途TCP通信のユニットを利用しているので完全版を以下においておきます。

→メールの受信

→トップへ →目次へ