【Rails】Action Mailerでdeliver_laterを使って非同期送信する方法

Rails8 イメージ

Rails でメール送信を同期で処理すると、画面のレスポンスが遅くなることがあります。
そこでよく使うのが deliver_later です。

目次

deliver_laterとは

Action Mailer でメール送信をバックグラウンドジョブに積み、あとで送る仕組みです。
Rails Guide でも、コントローラの応答を待たせない方法として案内されています。

基本コード

例えば以下のように書けます。

UserMailer.welcome_email(@user).deliver_later

同期で即送る deliver_now と違い、deliver_later は Active Job 経由で実行されます。

実装時の注意点

  • default_url_options の host を設定する
  • メール内リンクは *_path ではなく *_url を使う
  • 画像を使うなら asset_host も設定する

メールは通常のWebリクエスト文脈外で動くので、URL生成周りは特に注意が必要です。

まとめ

Rails でメール送信を実務的に使うなら、deliver_later を前提に考えたほうが扱いやすいです。
レスポンス改善にもつながるので、同期送信が必要な場面以外ではかなり使いやすい方法です。

参考一次情報

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