仕事でAction Mailer
のメール文言を修正するタスクがありました。
いちいちローカル環境でメール送信のためのオペレーションをせず、rails console
とletter_opener_web
で簡単に動作確認できたので、備忘録としてまとめます。
バージョン
- Rails 6.1.7.7
- letter_opener_web 2.0.0
記事の信頼性
- ぼくは独学で未経験から従業員300名以上の自社開発企業へ転職しました。
- 実務ではVue.jsとRailsを毎日書いています。
- 初心者や駆け出しエンジニアがつまづくポイントも身をもってよく理解しています。
目次
問題
Action Mailer
で実装されているメールの動作確認のため、ローカル環境で実際にメールを送る必要がありました。
しかし、そのメールをローカルで再現するためには、複雑なオペレーションをしなくてはならず、毎回それを行うのが手間に感じていました。
なお今回は、以下のような銀行送金に関するメールを送りたかったです。
class UserMailer < ApplicationMailer
default from: "hogehoge@example.com"
def bank_transfer_created(transfer_id)
# 銀行送金を実施したことを示すメールが送信される
end
end
解決策
結論として、rails console
でメール送信のメソッドを実行すればOKです。
$ rails console
[1] pry(main)> transfer_id = BankTransfer.last.id
[2] pry(main)> UserMailer.bank_transfer_created(transfer_id).deliver_now
これで送信したメールがletter_opener_web
で確認できるはずです。
deliver_now
メソッドは、Action Mailer
のメソッドの1つで、メールを即時送信するために利用されます。
deliver_now
がないと、rails console
上でメールオブジェクトが返されるだけで、メールは送信されないので注意しましょう。
おわりに
rails console
で実行すれば簡単に動作確認できるというのは、Action Mailer
に限らない話ですね。
ついついコンソールの存在を忘れがちなので、注意します。
コメント