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