Webシステム開発ではユーザーにメールを送信する機能が必要になるケースが多いですが、ローカル環境で試す分にはMailHog使うと良いというお話です。
MailHogとは
MailHogは開発用のメールテストツールで、ローカル上にシンプルなSMTPサーバを立ち上げることができます。
MailHogを使って送信したメールは実際のメールアドレスに届くことはなく、MailHogの管理画面から確認することができます。
そのため万一、赤の他人に間違ってメールが届いてしまうという実装時のヒューマンエラーを防ぐことができるので、セキュリティ的にも安全です。
ちなみに、Go言語で作られているみたいです。
導入方法
今回はDockerコンテナで立ち上げたので、その方法を紹介します。
以下のdocker-compose.ymlを作成して、ローカルでdocker-compose up -d
を実行します。
docker-compose.yml
1 2 3 4 5 6 7 |
version: '3' services: mailhog: image: mailhog/mailhog:latest ports: - "8025:8025" - "1025:1025" |
http://localhost:8025にアクセスすると、次のような管理画面にアクセスできます。
メール送信を試す
Laravelで立ち上げたAPIサーバからメールを送信してみます。
routes/api.php
1 2 3 4 5 6 7 8 9 |
<?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Mail; use App\Mail\TestMail; Route::get('/test-mail', function (Request $request) { Mail::to('test@example.com')->send(new TestMail()); }); |
API実行
1 2 3 4 5 6 7 8 9 10 11 |
$ curl -I http://api.sample.local/api/test-mail HTTP/1.1 200 OK Server: nginx/1.21.6 Content-Type: text/html; charset=UTF-8 Connection: keep-alive X-Powered-By: PHP/8.1.7 Cache-Control: no-cache, private Date: Mon, 20 Jun 2022 13:55:55 GMT X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59 Access-Control-Allow-Origin: * |
MailHog管理画面
メールが届きました、送信先test@example.com
を適当に変えても大丈夫です。
HTML形式のメールもそのまま表示されます。
まとめ
- MailHogを使うとローカル内でメール送信機能を作って、ダミーアドレスに送ったメールの確認ができる
- 開発時に使用するとメールが外部に漏れることがないので安全