2021年9月6日 現場Rails Chapter7 メールを送る
9/4の朝会の続き
送信処理の実装
前回はメールのテンプレートと送信するためのメソッドを定義したため、今回は送信する処理を記述します。タスクの登録処理と合わせてメールを送信する実装にしたいため、tasksコントローラのcreateアクションに送信処理を書き加えます。
app/controllers/tasks_controller.rb
def create 略)タスク作成処理 # 以下からメールの送信処理の記述です。 if @task.save TaskMailer.creation_email(@task).deliver_now redirect_to tasks_url, notice: "タスク「#{@task.name}」を登録しました。" else render :new end end
deliver_nowはメールを即時送信を行うためのメソッドです。
Active Jobと連携すると非同期にメールを送信することも出来ます。
Active Jobは、ジョブを宣言し、それによってバックエンドでさまざまな方法によるキュー操作を実行するためのフレームワークです。
以下のdeliver_laterメソッドを書くとタスクの登録処理の5分後にメールを送信することもできます。
TaskMailer.creation_email(@task).deliver_later(wait: 5.minutes)
開発環境でメールの受信を確認する方法はいくつかありますが、デフォルトでmailcathcherというgemが用意されています。他にもletter_opener (https://github.com/fgrehm/letter_opener_web) などがあります。いずれも、config/environments/development.rbでメールの配信方法やSMTPの設定を行います。mailcathcherを使う場合の設定は以下のように記述します。
config.action_mailer.raise_delivery_errors = false # 以下の2行を追記して設定を行います。 config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: '127.0.0.1', port: 1025 }
(設定ファイルの記述が完了したら、サーバーの再起動をお忘れなく!)
ターミナルで 'mailcatcher'を実行し、ターミナルに表示されたURLにアクセスするとブラウザ側で送信後の挙動を確認することが出来ます。
参照
Action Mailerを設定する - Railsガイド
https://railsguides.jp/action_mailer_basics.html#action-mailer%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B
スタックとキューを極める! 〜 考え方と使い所を特集 〜
https://qiita.com/drken/items/6a95b57d2e374a3d3292