開発をしていると、メール送信のテストをする必要があったり、逆に実際に送信されては困る場合があったりします。
そんな時に重宝するのが、メール送信のテスト環境だと思います。
テストツールを使用する前は、gmailでプロジェクト用のアカウントを取得したり、example+abc@gmail.comみたいにエイリアスを活用したりしていましたが、何かと面倒だったり受信ボックスが大変なことになったりするので、良いものはないかと探して試したりしていました。
と言うことで、今回は、いくつか試した中で自分的に良かったツールを2つ紹介したいと思います。
MailHog
Docker(docker-compose)を使用している場合は、特におすすめのメール送信テストツールです。docker-compose.ymlに、たった5行を追記するだけで、簡単に使用することができます。
mailhog:
image: mailhog/mailhog
ports:
- “8025:8025”
- “1025:1025”
上の記述をdocker-compose.ymlに追加すると、http://localhost:8025
でMailHogの画面が表示され、そこにメールが蓄積されていきます。
Sendmailもしくは、SMTPの設定をMailHogのものに設定する。
MailHog宛にメールを送信する方法は、2つあります。1つは、SMTPの設定を以下のようにすることで、プログラム内で送信されるメールが、MailHogに蓄積されるようになります。
この設定さえ終われば、送信されるメールも受信するメールも、すべてMailHogで確認することができるので、かなり良いのではないかと思います。
ただし、デフォルトの設定では、MailHogは、メールをメモリ上に保存するので、Dockerのコンテナを停止したりすると消えてしまいます。メールを消えないように残しておくには、docker-compose.ymlに追加で以下の内容を記載しておけば、ディレクトリにメールデータが保存されるようになるので、Dockerコンテナを再起動してもメールが残るようになります。
environment:
MH_STORAGE: maildir
MH_MAILDIR_PATH: /tmp
volumes:
- “./mailhog:/tmp”
SMTPの設定内容
MAIL_DRIVER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=user
MAIL_PASSWORD=password
MAIL_ENCRYPTION=null
これは、Laravelの.envファイルの設定内容ですが、別のフレームワークなどでも同じような感じで設定してもらえれば、使用できるかと思います。
mhsendmailの使用
MailHog宛にメールを送信するもう一つの方法が、sendmailのパスをmhsendmailに置き換える方法です。
Dockerを使用している場合であれば、Dockerfile内に以下のような記述を追加してmhsendmailのバイナリをダウンロードするようにします。
RUN curl -sSLO https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 \
&& chmod +x mhsendmail_linux_amd64 \
&& mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail
あとは、プログラムで使用するsendmailのパスを変更してあげます。 以下はphp.iniの例ですが、参考にしてください。
sendmail_path = “/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025”
mailtrap
2つ目のツールは、mailtrapです。これは、インストールして使用するタイプのツールではなく、テスト用のメールボックスを提供していくれるウェブサービスです。
Mailtrapを使用するメリットは、外部サービスなので、インストールなどの手間がなくsmtpサーバーの設定だけで使用できる点です。ユーザー登録も簡単にできるので、ちょっとしたメール送信テストには、ぜひお勧めしたいツールです。
Mailtrapは、フリープランがありますが、有料のサービスです。無料の範囲内で使用しようとすると制限がいくつかあります。
- 1秒間に2通までの送信
- メールボックスは、1つまで。
- 保存できるメールは、50通まで。
- 1ヶ月あたりメールテスト総数は500通まで
なぜ、ちょっとしたメール送信テストと書いたかと言うと、上記のような制限があるためです。プロジェクトに潤沢に予算があって有料プランでもOKと言う場合は、mailtrap一択でも良いかもしれません。
mailtrapの設定は、もの凄く簡単!
Mailtrapには、主要言語、主要フレームワークでの設定スニペットが予め用意されているので、コピペで使用開始できるのもおすすめの理由の一つです。
メールボックスのホーム画面にある各種設定に必要な情報たち
もし、スニペットの中に使用している環境のものがなかった場合は、メールボックスのホーム画面にある以下の情報をコピーして使用する言語のメール関連の設定値として使用すれば、mailtrapでメールの送信テストをすることができるようになります。
- Host
- Port
- Username
- Password
まとめ
今回は、メール送信テストに使用すると便利なツールとして、MailHogとmailtrapの2つを紹介しました。 どちらも気軽に取り入れることができるツールかとは思いますが、Dockerを使用していなかったり、そんなにテスト送信する件数が多くない場合は、mailtrap、Dockerを使用していて、テスト送信件数が多い場合は、MailHogのように使い分けています。