アプリケーションからのメール送信結果の内容を確認するためにプロバイダの SMTP に接続していましたが、単純に送信内容の確認をすることが目的であればそもそも実際にメールを送信する必要もありません。
Mac OS X 環境なので、Postfix をたてて IMAP/POP3 サーバー経由での接続で確認をしようかと思いましたが、さらに便利な方法が2つあることを確認。
- MailCatcher http://mailcatcher.me/
- MockSMTP http://www.mocksmtpapp.com/
それぞれ localhost でデフォルトポート 1025 で Listen しているので、メール送信をするアプリケーションの SMTP ポートを 25 から 1025 に変更してあげるだけで利用することができるようになります。
加えて受信したメッセージのプリビュー、ソース確認もできるので一通りの作業には困りません。
後者のMockSMTPは単純にインストールするだけで簡単ですので、ここでは触れません。
今回は、少し手こずった前者のMailCatcherに関してのセットアップについて整理。
環境
- Mac OS X 10.9.5 (Mavericks)
手順
- Xcode コマンドラインのインストール
xcode-select –install
- gcc を実行しライセンス利用規約に合意
gcc
- Ruby のインストール (および必要に応じてパスの変更)
brew install ruby
- i18n が 0.7 beta の場合にはアンインストール
gem uninstall i18n
- i18n v 0.6.11 をインストール
gem install i18n -v 0.6.11
- MailCatcher のインストール
gem install mailcatcher
- MailCatcher の実行
mailcatcher
- http://localhost:1080/ にアクセスして確認
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: TESTThis is a test message.
.
250 Message accepted
QUIT
221 Ok
Connection closed by foreign host.
以下のようにメールが確認できます。
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)