メールの受信は、POP3というプロトコルを利用します。
POP3でのユーザの認証は、ユーザ名とパスワードによって行われます。認証コマンドについてはRFC 1734として標準化されています。また、メールサーバからメールを受信するときのプロトコルは、RFC 1939(STD53)に標準仕様として記述されています。
RFCというのは、通信のインターネットの技術標準文書です。これに則って通信を行うようにします。
メーラーで一番利用者の多いOutlookでも、初期のバージョンでは、一部RFCを無視した仕様が使われていたため、バッシングを受けたことがあるそうです。
→RFC1939の和訳まず、クライアントが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通信のユニットを利用しているので完全版を以下においておきます。
→メールの受信