letter_opener_web + Action Mailer + Rails consoleでメールの文言を確認する

仕事でAction Mailerのメール文言を修正するタスクがありました。

いちいちローカル環境でメール送信のためのオペレーションをせず、rails consoleletter_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に限らない話ですね。

ついついコンソールの存在を忘れがちなので、注意します。

参考文献

Railsエンジニアにおすすめの記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

未経験でSESから従業員300名以上の自社開発企業に転職しました。業務や個人開発で直面した問題や、転職・学習の経験を発信していきます。

コメント

コメントする

目次