仮想SMTPサーバーMailCatcherにてテストメール受信

アプリケーションからのメール送信結果の内容を確認するためにプロバイダの SMTP に接続していましたが、単純に送信内容の確認をすることが目的であればそもそも実際にメールを送信する必要もありません。

Mac OS X 環境なので、Postfix をたてて IMAP/POP3 サーバー経由での接続で確認をしようかと思いましたが、さらに便利な方法が2つあることを確認。

  1. MailCatcher http://mailcatcher.me/
  2. MockSMTP http://www.mocksmtpapp.com/

それぞれ localhost でデフォルトポート 1025 で Listen しているので、メール送信をするアプリケーションの SMTP ポートを 25 から 1025 に変更してあげるだけで利用することができるようになります。

加えて受信したメッセージのプリビュー、ソース確認もできるので一通りの作業には困りません。

後者のMockSMTPは単純にインストールするだけで簡単ですので、ここでは触れません。

今回は、少し手こずった前者のMailCatcherに関してのセットアップについて整理。

環境

  • Mac OS X 10.9.5 (Mavericks)

手順

  1. Xcode コマンドラインのインストール

    xcode-select –install

  2. gcc を実行しライセンス利用規約に合意

    gcc

  3. Ruby のインストール (および必要に応じてパスの変更)

    brew install ruby

  4. i18n が 0.7 beta の場合にはアンインストール

    gem uninstall i18n

  5. i18n v 0.6.11 をインストール

    gem install i18n -v 0.6.11

  6. MailCatcher のインストール

    gem install mailcatcher

  7. MailCatcher の実行

    mailcatcher

  8. http://localhost:1080/ にアクセスして確認
    mailcatcher-0

Mailcatcherの起動と停止

Mailcatcherの起動は上述手順7のようにmailcatcherで実行可能。もしくはlaunchctlを使って実行停止可能。

起動

launchctl load ~/Library/LaunchAgents/me.mailcatcher.plist

停止

launchctl unload ~/Library/LaunchAgents/me.mailcatcher.plist

面倒なので以下のようにスクリプトを作って対応。これでstartmailcatcherとstopmailcatcherで処理。

# mailcatcher start / stop

startmailcatcher()
{
  launchctl load ~/Library/LaunchAgents/me.mailcatcher.plist
}

stopmailcatcher()
{
  launchctl unload ~/Library/LaunchAgents/me.mailcatcher.plist
}

テストメールの送信

ここではtelnetを使って簡単なテストメッセージを送信します。以下、青字が実際に手動で実行するコマンド

$ telnet localhost 1025
Trying ::1…
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1…
Connected to localhost.localdomain.
Escape character is ‘^]’.
220 EventMachine SMTP Server
EHLO localhost.local
250-Ok EventMachine SMTP Server
250-NO-SOLICITING
250 SIZE 20000000
MAIL FROM: no-reply@test.com
250 Ok
RCPT TO: test@test.com
250 Ok
DATA
354 Send it
Subject: TEST

This is a test message.
.
250 Message accepted
QUIT
221 Ok
Connection closed by foreign host.

以下のようにメールが確認できます。

mailcatcher-1

MailcatcherのLISTENポートの確認

$ lsof -i -P|grep -i “listen”|grep -i “ruby”
ruby      77583 i303726   10u  IPv4 0xcdb14ea3eefcf425      0t0  TCP localhost:1025 (LISTEN)
ruby      77583 i303726   11u  IPv4 0xcdb14ea3f3653da5      0t0  TCP localhost:1080 (LISTEN)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です