SMTP スタブ

SMTP サーバの応答を再現するサンプル。接続直後のあいさつと各コマンドへの応答を、構造体定義なしのオートメーションだけで構成しています。メール送信アプリの通信テストを実機なしで行えます。

TCP 2525テキスト行ベースUTF-8フレーミングなし

概要

接続直後に 220 CommSim ESMTP ready を自動送信する「接続時あいさつ」と、EHLOHELOMAIL FROMRCPT TODATAQUIT の各コマンドに応答するオートメーションで構成されます。

フレーミングは「なし」(テキスト行ベース)。長さフィールドやバイナリ構造を持たないテキストプロトコルを、テキスト一致のオートメーションだけで表現する例です。

SMTP サンプルのオートメーション一覧
オートメーションタブ:接続時あいさつと各 SMTP コマンドへの応答を優先度順に管理

機器構成

単一の TCP サーバセッション。SMTP クライアント(CommSim.Sample のシナリオ「SMTP」や telnet 127.0.0.1 2525)が接続します。

SMTP クライアントメール送信アプリ
CommSimSMTP スタブ(2525)

通信フロー

サーバ側が接続確立直後に 220 を先に送り、以降クライアントのコマンドに応答します。

  • 接続時 ←220 CommSim ESMTP readyあいさつ(自動)
  • Client →EHLO example.com
  • ← CommSim250-CommSim / 250 OK
  • Client →MAIL FROM:<...>
  • ← CommSim250 OK
  • Client →RCPT TO:<...>DATA
  • ← CommSim250 OK354 End data ...
  • Client →QUIT
  • ← CommSim221 Bye

想定プロトコル

SMTP は \r\n 区切りのテキストコマンドを 1 行ずつやり取りします。バイナリ構造は持たないため、フレーミングは「なし」で、1 回の TCP 受信を 1 メッセージとして扱います。

コマンド行(例)   EHLO example.com\r\n
応答行(例)       250-CommSim\r\n
                  250 OK\r\n

使用する機能

接続時あいさつ

接続時トリガーで 220 を先に送信

テキスト条件応答

前方一致でコマンド判定(QUIT は完全一致)

優先度の先勝ち

EHLO/HELO を優先度で出し分け

設定内容

プロジェクト設定

既定データ形式UTF-8(テキスト)
フレーミング方式なし(None)
セッションTCP サーバ / ポート 2525

オートメーション(優先度の昇順で評価)

名前優先度トリガー / 一致送信内容
接続時あいさつ10接続時220 CommSim ESMTP ready\r\n
EHLO/HELO10前方一致 EHLO250-CommSim\r\n250 OK\r\n
HELO11前方一致 HELO250 CommSim\r\n
MAIL FROM20前方一致 MAIL FROM250 OK\r\n
RCPT TO30前方一致 RCPT TO250 OK\r\n
DATA40前方一致 DATA354 End data ...\r\n
QUIT50完全一致 QUIT\r\n221 Bye\r\n
各コマンドは引数が続くため前方一致で判定。引数を取らない QUIT だけは誤マッチを避けて完全一致にしています。優先度で評価順を明示し、先勝ちで出し分けます。
開き方:samples/smtp/smtp.commsim を「ファイル」→「開く」(Ctrl+O)。起動後、telnet 127.0.0.1 2525 等で接続すると、まず 220 が届きます。

他のサンプルも構成・フロー付きで解説しています。

サンプル集へ戻る