なでしこ > Delphi > 戻る

SMTPの通信

 受信の後は送信です。SMTPプロトコルについてです。
■SMTPとは
  ┣SMTPの仕組み
  ┣実際の送信プログラム

SMTPとは

 SMTPとはメール送信のためのプロトコルです。通信ポートは通常25番です。

 基本的なSMTPの仕様は、RFC 821で規格化されています。さらに一部を拡張して、8bitデータの送受信を可能にしたり、メッセージサイズのネゴシエーションを可能にしたりしたものがRFC 1651〜1653で規格化されています。

→RFC 821

→SMTPコマンド

SMTPの仕組み

まず、クライアントがサーバーに接続します。するとサーバーが挨拶を返します。

220 domain ESMTP

クライアントは、HELO (または EHLO) コマンドを送って応答を待ちます。

HELO test

すると、「250 OK」という250のメッセージが戻ってきます。それ以外の番号ではエラーになります。それを確認したら、次に送信元のアドレスを送信します。

MAIL FROM: <test@nadesi.com>

すると同じように「250 OK」が戻ってきます。次に送り先を送信します。

RCPT TO: <test@nadesi.com>

同じように250を確認したら、メールデータを送信する旨を送ります。

DATA

今度は、354 が戻ってきます。そして、メールのヘッダと本文を送信し、最後に、「.」+改行を送信します。

すると、250が戻ってきます。最後に、「QUIT」を送信して、221が返ってきたらメールの送信が成功です。

実際の送信プログラム

では実際にプログラムを書いてみます。前回利用した TCPユニットを使って書いてみました。

var
  tcp: TKTcpClient;
begin
  tcp := TKTcpClient.Create(nil);
  try
    tcp.Host := 'localhost';
    tcp.Port := 25;
    tcp.Open;
    Writeln( tcp.recvln ); // 220 SMTP ready
    tcp.SendLn('HELO ' + GetComputerName);
    Writeln( tcp.recvln ); // 250 OK
    tcp.SendLn('MAIL FROM: <test@nadesi.com>');
    Writeln( tcp.recvln ); // 250 OK
    tcp.SendLn('RCPT TO: <test@nadesi.com>');
    Writeln( tcp.recvln ); // 250 OK
    tcp.SendLn('DATA');
    Writeln( tcp.recvln ); // 354 Enter mail,end with "." on a line by ltself
    tcp.SendLn('Subject: test');
    tcp.SendLn('');
    tcp.SendLn('hello, this is test.');
    tcp.SendLn('ok?');
    tcp.SendLn('.');
    Writeln( tcp.recvln ); // 250 OK
    tcp.SendLn('QUIT');
    Writeln( tcp.recvln ); // 221 delivering mail
    tcp.Close;
  finally
    tcp.Free;
  end;
  readln;
end.



→トップへ →目次へ