SMTPの概要

SMTP(Simple Mail Transfer Protocol)とは、電子メールを送信するためのプロトコルです。アプリケーション層に位置し、トランスポート層にTCPを利用します。SMTPのウェルノウンポート番号は25です。クライアントPC側のメールソフトとメールサーバソフトの間でSMTPコマンドと応答コードのやり取りで電子メールを送信します。また、SMTPサーバのメールサーバソフト間でもSMTPで電子メールを送信します。

図 SMTPの概要
図 SMTPの概要

なお、SMTPコマンドを送信する側がクライアントでSMTPコマンドを受けてその処理をし、応答コードを返す側がサーバとなります。メールサーバ間のSMTPの転送のときには、送信元のメールサーバがクライアントで宛先のメールサーバがサーバです。

SMTPコマンドと応答コード

SMTPでメールを送信する際の主なSMTPコマンドと応答コードを以下の表にまとめています。

SMTPコマンド意味
HELOセッションの開始
EHLOセッションの開始(拡張SMTP)
MAIL送信元を通知
RCPTあて先を通知
DATAメールデータ本体を送信
QUITセッションの終了
RSETやり取りを中止し送られてきた情報を破棄
VERYユーザ名の確認
NOOP何もしない
表 主なSMTPコマンド

応答コード意味
220サービスの準備完了
221サービス切断
250コマンドが正常に完了
354メールの入力を開始。<CRLF><CRLF>で終了
500文法エラー。コマンドが理解不能
表 主な応答コード

SMTPの手順

普段利用しているメールソフトでメールを書いて、送信ボタンをクリックすると、上記のようなSMTPコマンドと応答コードのやり取りが行われることになります。SMTPコマンドと応答コードを利用した電子メールのやり取りの手順は、次のようになります。

  1. SMTPの開始(HELOコマンド)
  2. 送信元メールアドレスの通知(MAILコマンド)
  3. 宛先メールアドレスの通知(RCPTコマンド)
  4. メール本文の送信開始(DATAコマンド)
  5. メール本文の送信
  6. SMTPの終了(QUIT)

まず、クライアントからサーバへHELOコマンドを送信します。HELOコマンドに対して、サーバは応答コード250を返して、SMTPの通信を開始します。

そして、MAILコマンドで送信元のメールアドレスを通知します。MAILコマンドに対してサーバは応答コード250を返します。さらにRCPTコマンドで宛先のメールアドレスを通知します。RCPTコマンドに対しても、サーバは応答コード250を返します。宛先メールアドレスが複数ある場合は、RCPTコマンドの送信を繰り返します。

メール本文の送信開始を宣言するためのコマンドがDATAコマンドです。DATAコマンドを受け取ると、サーバは応答コード354を返して、メールの本文データを待ち受けます。その際、メールの本文データは、<CRLF><CRLF>で終了することをクライアントに通知します。<CRLF>は改行コードです。

クライアントからメール本文データを送信します。本文データは<CRLF><CRLF>で終了します。サーバは<CRLF><CRLF>のメール本文の終了を受け取ると、応答コード250を返します。

最後にクライアントはSMTPの通信を終了させるためにQUITコマンドを送信し、サーバは応答コード221を返します。

図 メール送信時のSMTPコマンドと応答コード

TCP/IP