Rails は config.action_mailer.delivery_method
で、:sendmail
なり指定すればサッとメール送信できるので便利で良いですね。 とはいえ、環境によっては「メールを送信したくない!」というパターンがあるので。 しかし単純に送信部分をコメントアウトなりしちゃうと、サインアップ処理の最後に爆発しちゃうこともあるのでどうしたもんか。
そんなときは、 :file
を利用しましょう。
delivery_method で指定できる配信方法
以下の通りです。
というと非常にアレなんで、大体以下の分類に分けられます。
- メールを送信する
:smtp
- 外部の smtp サーバを利用する
:sendmail
- ローカルの
sendmail
を利用する
- ローカルの
- メールを送信しない
:file
- ファイルに書き出す
:test
- 配列に書き出す(使ったことないな、そういえば……)
:file とは
メールを送信せずにファイルに書き出します。 保存先は #{Rails.root}/tmp/mails
あたりとなり、具体的には以下です。
それ letter_opener_web
でよくない?
Basic 認証などで閲覧制限をしているだけの場合、下手こくとメールの内容が外部に漏れてしまうので、実環境ではあまり良くないですね。 ちゃんと認証かけた領域にルーティング設定しているなら letter_opener_web
gem でも良いとは思いますが、今度は gem のメンテナンスコストが出るようになるので、僕はこちらを選択しました。
- メールを外部に送信されないようにしてくれ
- けど何かあったら送信内容や動作を確認したい
これらの場合、メンテナンスコストを上げることなく対応できるのが良き……、という感じです。
CLI 上でメールを確認する
#{Rails.root}/tmp/mails
あたりを確認してみましょう。
2019-04-08 22:02:10 ⌚ |2.5.1| donbulinuxnoMacBook-Pro in ~/Workspace/no_send_mail_project ± |master U:2 ✗| → gls tmp/mails/ total 16K drwxr-xr-x 4 donbulinux staff 128 4 8 21:36 . drwxr-xr-x 8 donbulinux staff 256 4 8 18:21 .. -rw-r--r-- 1 donbulinux staff 4.2K 4 8 18:21 donbulinux@example.com -rw-r--r-- 1 donbulinux staff 4.2K 4 8 18:21 donbulinux+test@example.com
どうやら To
に指定したメールアドレスでファイルが生成されているようですね。 vi
で開いてみましょう。
vi tmp/mails/donbulinux\@example.com # snip # Content-Type: text/html; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit <!DOCTYPE html> <html> <head> <meta content='text/html; charset=iso-2022-jp' http-equiv='Content-Type'> </head> <body> <p> ^[$B%F%9%H!!@h@8^[(B # snip #
アガーッ!! :e ++enc=iso-2022-jp
でメールのヘッダに指定されている通りに開き直してみましょう。
# snip # Content-Type: text/html; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit <!DOCTYPE html> <html> <head> <meta content='text/html; charset=iso-2022-jp' http-equiv='Content-Type'> </head> <body> <p> テスト 先生 </p> # snip #
やったぁ。 これで gem の追加やコードの変更を大規模に行うことなく、メールを外部に送信せず、しかし内容があとから確認できる環境が用意できましたね。