実務であまり使うことはなかったが、最近Laravelの勉強をする中で触れることがあったライブラリが「MailCatcher」。

MailCatcherは簡易のメールサーバーライブラリで、実際にメールを送信することはできないが、送信したメールをライブラリ内に保存し、ブラウザ上の管理画面から送信した内容を確認することができる。

今回は、このMailCatcherをDockerで動かす方法を紹介する。

docker-compose.ymlにMailCatcherを追加

docker-compose.ymlを使った方法を説明する。

ファイル内に以下の設定内容を追記する。

version: '3'

services:

# MailCatcher用のコンテナ
 mailcatcher:
  image: schickling/mailcatcher
  ports:
    - 1080:1080

使用するDockerイメージと、ポートの指定のみと、シンプルな記述でOK。

ファイルを保存したらdocker-compose up -dでコンテナを起動。

ブラウザから管理画面にアクセスする際はlocalhost:1080とURL欄に入力すれば以下のような画面が表示されるはずだ。

コンテナ立ち上げ時は空の状態

WebアプリからMailCatcherを利用してメールを送信する

LaravelなどのWebアプリケーションから、送信サーバーとしてMailCatcherを利用する場合は、以下のように設定ファイルを編集する。
※Laravelの.envファイルの例

MAIL_DRIVER=smtp
MAIL_HOST=mailcatcher
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=mailcatcher@example.com
MAIL_FROM_NAME="${APP_NAME}"

Dockerコンテナの場合、ホスト名には対象のコンテナ名を指定し、ポートはMailCatcherでは1025を使用する。

ユーザー名、パスワードはnullでOK。

設定を保存し、Webアプリからメールを送信すると、送信メールがMailCatcherの管理画面上に表示されるようになる。