6.3 Action Mailerのコールバック

送信前に処理を追加する

メイラーのアクションが実行される前に処理を追加するにはbefore_actionを使います。コントローラ同様メソッド名のシンボルを引数にすることで指定できます。

以下の例では送信前にデフォルトのメールアドレスを変更しています。

class PostMailer < ApplicationMailer
  default from: '[email protected]'

  before_action :change_default_from

  def published_email(post)
    @post = post
    mail(
      from: "#{@post.user.name} <[email protected]>",
      to: @post.user.followers.pluck(:email),
      subject: '投稿が公開されました'
    )
  end

  private
    def change_default_from
      default from: '[email protected]'
    end
end

送信後に処理を追加する

メイラーのアクションが実行された後に処理を追加するにはafter_actionを使います。コントローラ同様メソッド名のシンボルを引数にすることで指定できます。

以下の例では送信後にフォロワーのIDをログに取っています。

class PostMailer < ApplicationMailer
  default from: '[email protected]'

  after_action :logging_published_mail

  def published_email(post)
    @post = post
    mail(
      from: "#{@post.user.name} <[email protected]>",
      to: @post.user.followers.pluck(:email),
      subject: '投稿が公開されました'
    )
  end

  private
    def logging_published_mail
      followers = @post.user.followers.pluck(:id)
      logger.debug "USER IDs = #{followers}"
    end
end

results matching ""

    No results matching ""