nginx
mailcatcher

mailcatcher に nginx で BASIC 認証をかける

More than 1 year has passed since last update.

mailcatcher とは

mailcatcher は TCP/1025 を SMTP ポートとして指定することで、Rails などから送信されたメールを一律 TCP/1080 で閲覧できるようにする、いわゆるメールプロキシの類の gem です。大量送信しても送信一覧がログとして残るので便利だし、インターフェースがメーラーっぽいのでとっつきやすいのが嬉しい。

https://mailcatcher.me/

BASIC 認証をかけたいが・・・

これをステージング環境に置いておけばメールが確認できてウハウハ、という感じになるのですが、残念ながら mailcatcher 単体では BASIC 認証をかけるオプションがありません。なので BASIC 認証をかけたい場合は nginx でよろしくやっていくことになります。

サンプルコード

/etc/nginx/conf.d/default.conf など、各々リバースプロキシを設定しているファイルの
rails ディレクトリに以下のような設定を記述します。

# (1) そもそもの基本設定
location /mailcatcher {
    auth_basic "Auth Required.";
    auth_basic_user_file /path/to/.htpasswd;
    proxy_pass http://127.0.0.1:1080/;
}
# (2) mailcatcher のページで使うアセット群のための設定
location ~ ^/assets/(logo.png|mailcatcher.(css|js)) {
    proxy_pass http://127.0.0.1:1080;
}
# (3) mailcatcher のページから JSON API リクエストがあるのでそのための設定
location ~ ^/messages {
    proxy_pass http://127.0.0.1:1080;
    proxy_http_version 1.1;     
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

/assets/logo.png とか /messages とか Rails でも使ってるんですけど、という場合は、諦めて別サーバにするしかないかもしれません。 logo.png は最悪なくても画面右上のメールロゴがなくなるだけなので大丈夫ですが。

mailcatcher を起動し nginx を再起動

$ mailcatcher --ip 0.0.0.0
$ sudo service nginx restart

上記のように起動し http://url.to.your.app/mailcatcher へブラウザでアクセスすれば mailcatcher が見えますので、後は宜しくやってください。