不動の鳥の勉強記録

時間があるときに勉強したことをメモします。

メールの送信試験用にSMTPサーバを立てる(smtp4dev)

■はじめに

アプリケーションにはよくEメールを送信したいというケースがあると思います。 Eメールの試験では、文面や、from、toのアドレスが想定通りかどうかなど確認項目がいくつかあります。 ただ、実運用しているSMTPサーバにリクエストを出してしまうと、Eメールが相手に届いてしまい迷惑になってしまうことがあるため、 試験用にSMTPサーバを立てる必要が出てきます。 今回は試験用にSMTPのリクエストを受領し応答を返却するsmtp4devをWindows上で動かした際の動作などを記載していきます。

■試験用のSMTPサーバのアプリケーションはどんなものがあるか

いろんなアプリケーションがあります。

例えば

などがあります。それぞれ特色があるので環境やニーズにあったアプリケーションを利用すると便利です。

今回は現在も継続的に更新がされており、Windows環境で簡単に動かせそうなsmtp4devについて記載していきます。

■smtp4devとは

smtp4devはダミーのSMTPサーバのアプリケーションとなっており、Windows, Linux, Mac OSソースコードがあり簡単に導入できるアプリケーションとなっています。 もちろんdockerもあります。

github.com

今回はWindowsで動かしていきます。本記事の動作環境は下記となります。

■環境

  • ホストOS: Windows 10 home 64bit
  • smtp4dev: 3.1.3.2

■動かし方

単純に動かしたい場合は、ダウンロードして解凍したフォルダ内にある Rnwood.Smtp4dev.exe をダブルクリックします。 そうすると、コンソールが立ち上がりsmtp4devが起動します。 各種SMTPサーバの設定は、同フォルダ内の appsettings.json を編集します。

■デフォルトで使用するネットワークポートと設定

smtp4devではデフォルトで下記ポートを利用します。

SMTP ServerとIMAP Serverのポート番号については、設定ファイルで変更が可能です。Web UIについて起動時のオプションで設定変更が可能です。 また、Web UIはデフォルト起動時はローカルホストからのみ接続が可能となっており、リモートの別マシンからWeb UIにアクセスしたい場合は、起動時に --urls オプションを利用します。

■受信したメールはどこに保管されるか

デフォルトでは APPDATA の中に保管されます。エクスプローラーで「%APPDATA%\smtp4dev\」にアクセスすると、database.dbというファイルが出来上がっておりその何か受信したメールの情報が入っています。 これはSQLiteのファイルとなっています。

■いろいろといじってみる①リモートの別マシンからWeb UIにアクセスしてみる。

デフォルトのネットワーク設定だとWeb UIにリモートからアクセスできないので、コマンドラインからexeファイルを起動する際に --urlsオプションを付けてみます。

> Rnwood.Smtp4dev.exe --urls=http://*:5000

こちらのコマンドではurlsオプションで外部から5000番ポートにアクセスできるようにしています。ホストマシンのセキュリティソフトやセキュリティ設定または、Firewallで通信ポートが閉じられているとアクセスできないので注意してください。

私は同じローカルエリアネットワークにいるiPhoneから接続を試してみたところ、うまくページが表示されず苦戦しました。 単純に5000番ポートのみアクセス許可すると、画面は開けるが右上のsmtp serverの稼働状況のところはタイムアウトします。 ソースコードまだ読んでいないのですが、Windowsの場合はリモートプロシージャコールなども考慮する必要がありそうです。

また、Web UIにアクセスするブラウザが古い場合は、smtp4devのロゴとloadingのメッセージのみ表記となります。

Web page just shows smtp4dev logo and "Loading..." · Issue #353 · rnwood/smtp4dev · GitHub

■いろいろといじってみる②Windowsのサービスに登録する

GithubのinstallationのページにWindowsサービスへの登録コマンドがあるので実行してみます。 管理者権限でコマンドプロンプトを立ち上げ下記コマンドを実施する。Rnwood.Smtp4dev.exeはC:\smtp4devに配置しました。

> sc.exe create Smtp4dev binPath= "C:\smtp4dev\Rnwood.Smtp4dev.exe --service"

そうするとSmtp4devというサービスが登録することができました。serviceに対応しているのは便利ですね。 ただこのままだとWeb UIの起動がデフォルトのままなので、外部からアクセスすることができません。 先ほどの外部からの設定と同じようにurlsオプションを設定します。

> sc.exe create Smtp4dev binPath= "C:\smtp4dev\Rnwood.Smtp4dev.exe --service --urls=http://*:5000"

こうすることでサービス起動時も外部からWeb UIにアクセスすることが可能になりました。

ちなみにWindowsサービスで%APPDATA%はどこを挿すかというと下記になります。

C:\Windows\System32\config\systemprofile\AppData\Roaming

こちらの下にsmtp4devのフォルダが作成され、database.dbなどのファイルが配置されます。

■おわりに

今回はsmtp4devについて紹介しました。開発者の方も積極的に更新をされているので、今後の成長も見込めてよいアプリケーションと個人的に思います。 ただ連続でリクエストを送るとエラーになる確率が高そうなので、あくまで時々テストするとかがよいのかなと思いました。

MailDevも気になっているのでsmtp4devでしばらく動かしてみて至らない点があったらMailDevについても調べようと思います。