NDW

アプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング windows 基盤技術 開発標準化

開発・検証用のダミーメールサーバの構築(fakeSMTP)

投稿日:2019年9月15日 更新日:

アプリ開発や検証等でメールサーバを利用したい場合がある。
プロジェクトで共有の検証用メールサーバを構築できると効率が良いか、その準備が間に合わなかったり、使用者が限定的な場合は、使用者の開発環境上に構築した方が手っ取り早い。
ここでは、fakeSMTPというダミーのメールサーバを構築する方法を説明する。

fakeSMTPのインストール

公式サイトからfakeSMTP.jarをダウンロード・展開し、実行します。

インストールと動作確認

  1. 上記の公式サイトのdownloadページから最新版をダウンロード(fakeSMTP-latest.zip)します。
    (2019年9月現在、v2.0が最新でした。)
  2. ダウンロード後、任意の場所に解凍します。
    (以降では”C:\fakeSMTP-latest”に展開した想定で説明します。)
  3. javaコマンドを使ってfakeSMTPを実行します。
    java.exe -jar C:\fakeSMTP-latest\fakeSMTP-2.0.jar
  4. 表示されたGUIで[サーバー起動]をクリックします。
  5. 何らかの方法でメールを送信します。
    簡単にメール送信したい場合は、下記のようなPowerShellを実行してメールを送信できます。

    $EmailFrom = "sender@example.com"
    $EmailTo ="receiver@example.com"
    $Subject = "お知らせ"
    $Body = "これはテストです。"
    $SMTPServer = "localhost"
    $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
    $SMTPClient.EnableSsl = $false
    $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
    $SMTPClient.Dispose()
    
  6. 送信したメールの内容が、次のようにfakeSMTPのGUIに表示されることを確認する。
  7. 表示行をダブルクリックすることで、OutlookやThunderbird等のメールクライアントで確認することもできます。(拡張子emlに対応するアプリが起動されますが、Outlook等の当該アプリが単独で正常に起動できるようになっていないとエラーで開けません。)

補足

公式サイトに説明がない動作についての補足です。

  • fakeSMTPが終了する際、設定情報がユーザフォルダ(%USERPROFILE%)の下記プロパティファイルに出力されます。
    #Last user settings
    #Sun Sep 15 21:23:14 JST 2019
    emails.suffix=.eml
    emails.default.dir=received-emails
    application.name=FakeSMTP
    smtp.default.port=25
    application.min.height=440
    logback.appender.name=SMTPLOGS
    application.min.width=640
    application.title=Fake SMTP Server
    application.icon.path=/icon.gif
    
  • 「メッセージ保存先」は既定でreceived-emailsとなっています。これは、ユーザフォルダ(%USERPROFILE%)のreceived-emailsとなります。

開発者展開用のバッチ

概要

開発者が難しいことを知らずに、ワンクリックでローカルにダミーのSMTPサーバを起動するためのバッチです。開発標準の一環として、”C:\fakeSMTP-latest”を圧縮して開発者に展開する想定です。

起動するfakeSMTPの仕様は次の通りです。

  • fakeSMTPのGUIを表示し、サーバを自動で開始する。
    (既定では、GUI表示後にユーザが[サーバー開始]ボタンをクリックする必要がある。)
  • 受信したメールは証跡として、バッチと同じフォルダのmailフォルダに残す。
  • SMTPの既定の25番ポートを使用する。
  • fakeSMTP起動時の-aオプションでリッスンするアドレスを指定できますが、-b, -sと併せて指定する必要があります。-bはバックグラウンド実行オプションで自動開始の-sオプションと併せて使う必要があります。GUIで確認できた方が分かりやすいので、ここでは-bオプションは使用しません。

使い方

fakeSMTP-2.0.jarと同じフォルダに配置し、バッチ上のJAVA_HOMEまたはJVM変数を環境に合わせて書き換えて、管理者権限を持つユーザで実行してください。
使用している環境変数に関しては、こちらをご覧ください。

@echo off
title fakeSMTP
rem ========================================
rem fakeSMTP.bat - fakeSMTP起動ラッパー
rem ========================================

rem カレントフォルダを、このバッチがある場所に変更
cd /d "%~dp0"

rem 基本定数--------------------------------

rem 使用するfakeSMTP
SET TARGET=fakeSMTP-2.0.jar

rem fakeSMTPの実行に使用するJDK/JRE(1.6以上が必要)
SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0_171
SET JVM=%JAVA_HOME%\bin\java.exe

rem 受信したメールの保存先
rem 当該フォルダが存在しない場合、fakeSMTPが作成
SET MAIL_FOLDER=.\mail

rem fakeSMTPオプション(v2.0)----------------
rem (詳細: http://nilhcem.com/FakeSMTP/)

SET FS_OPT=

rem fakeSMTPオプション: 起動後にSMTPサービスを開始
SET FS_OPT=%FS_OPT% -s

rem fakeSMTPオプション: リッスンポート
rem ※25番ポートを使う場合は管理者権限で実行が必要
SET FS_OPT=%FS_OPT% -p 25

rem fakeSMTPオプション: メール保存先(保存しない場合は-m)
rem SET FS_OPT=%FS_OPT% -m
SET FS_OPT=%FS_OPT% -o "%MAIL_FOLDER%"

rem バインドするインターフェイスを指定する-aオプションは
rem -b, -sオプションと併せて指定する必要がある。

rem 実行------------------------------------

echo fakeSMTPを起動します.....
echo (終了する場合はGUIを閉じるか、このバッチをCtrl+Cで終了してください。)

SET RUN_CMD="%JVM%" -jar "%TARGET%" %FS_OPT%
rem echo コマンド: %RUN_CMD%
%RUN_CMD%

rem EOF







-1. システムエンジニアリング, windows, 基盤技術, 開発標準化

関連記事

HTML4, HTML5エスケープ(文字参照)

数値文字参照・文字実体参照 半角の不等号(<>等)などのHTML上で直接記述できない文字や記号を表記する方法が文字参照です。 HTMLやXMLの基になっているSGMLから提供されている手段 …

AzureAD B2Cユーザアカウントの操作方法(PowerShell)

Microsoft Graph APIを使ってAzureAD B2Cユーザアカウントを操作するようなアプリケーションを開発しています。 テストエビデンスの取得のために、Microsoft Graph …

ルートCA、サーバ・クライアント証明書の作成方法

概要 検証・開発環境での使用を前提とした、ルートCA証明書の作成、その証明書で署名したサーバ証明書とクライアント証明書を作成する手順を説明します。 可能な限りシンプルで簡単な条件・手順になっています。 …

HTML5文字実体参照をタブ区切りファイルに変換

概要 HTML5で定義されている文字実体参照を、タブ区切りファイル(TSV形式)に変換するサンプルコードを紹介します。 HTML5の文字実体参照はHTML Living Standardの13.5 N …

検証用のリバースプロキシサーバの構築方法

リバースプロキシサーバで設定されるHTTPヘッダを使ったアプリの機能が必要になる場合がありますが、開発環境にリバースプロキシサーバが用意されることは経験的にほとんどなく、動作確認に困ることが多々ありま …