はじめに
開発中に安心して使えるメールサーバーのモックを探していたら、MailDevという良さげなツールを見つけたので使ってみました。
今回は公式のDockerイメージをdocker-composeで動かしています。
MailDevとは
開発中にメール機能をテストするためのツールで、以下のような特徴を持っています。
- ローカルマシン上にモックSMTPサーバーを構築できる
- 公式のDocker imageがある
- npmでもインストール可能(参照)
- あくまでモックなので、外の世界にメールが送信されることはない
- モックSMTPサーバーから送信したメールの内容を、ブラウザで確認することができる
モックサーバーの構築
以下の手順で構築および動作確認していきます。
- docker-compose.yamlを記述する
- Dockerコンテナを起動する
- ブラウザでlocalhost:1080を開きサーバーが立ち上がっていることを確認する
- telnetでモックサーバーにメールを送信する
- ブラウザでメールが届いたことを確認する
今回はDocker Composeで構築していますが、dockerコマンドでも実行できます。
(詳細は公式参照)
docker-compose.yaml
services:
maildev:
image: maildev/maildev
ports:
- "1080:1080"
- "1025:1025"
1080ポートでWebサーバーが、1025ポートでSMTPサーバーが起動しているので、それらを公開しています。
動作確認
docker-compose up
でDockerコンテナを起動し動作確認をしていきます。
モックサーバー起動確認
コンテナが起動した状態でhttp://localhost:1080にアクセスすると以下が表示されます。
メール送信
モックサーバーの起動が確認できたので、実際にメールを送ってみましょう。
telnetコマンドを使うと簡単に送ることができます。
(telnetコマンドはWindowsならWSLにデフォルトでインストールされていますが、Macの場合ないのでbrew install telnet
でインストールしてください。)
telnetコマンド実行
telnet localhost 1025
上記を実行するとコンソールに以下のようなレスポンスが返ってきます。
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 1bd612940a79 ESMTP
これでモックサーバーとの接続が確立されました。
SMTPセッション開始
まず最初にHELO
コマンドでクライアントのホスト名をサーバに伝えます。
今回はモックサーバー相手なので、クライアントのホスト名はなんでも大丈夫です。
接続を確立したコンソールでそのまま以下を打ち込み、エンターしてください。
HELO test.com
すると以下のようなレスポンスが返ってきます。
250 1bd612940a79 Nice to meet you, [192.168.65.1]
メール送信
次に以下を続けざまに入力します(レスポンスは省略)。
MAIL FROM: <test@test.com>
RCPT TO: <target-address@test.com>
DATA
Subject: this is mail title
this is mail content
.
これでモックSMTPサーバーを使って、test@test.comというアドレスから、target-address@test.comというアドレスに対して、メールが送信されました。
ちなみにDATA
の後に入力しているものはメールの件名とメール本文なのですが、Macで日本語入力すると、telnetの問題で文字化けするのでアルファベットのみにしたほうが賢明です。
(WSLは日本語でも大丈夫でした)
メール送信確認
ではどんなメールが送信されたか確認してみましょう。
http://localhost:1080に再度アクセスすると、以下のような内容が確認できるはずです。
まとめ
MailDevを使うことで、外部にうっかりメール送信してセキュリティ事故になるといったことが防げるようになります。
環境変数で開発環境はローカルのモックSMTPサーバー、本番環境はAWS SESなどのSMTPサーバーを向くようにしておけば、安心して開発することができますね。