久々のRailsネタ
今回やりたいのはActionMailer経由でのメール送信時に送信先のログを吐きたい。
ActionMailerにはObserverというトリガー?的な機能があるのでそれにhookする感じで
まずはログ出力先の設定 config/application.rbに追記
config.mail_logger = Logger.new("log/mail_#{Rails.env}.log")
次にObserverクラスを適当に作る 最終的にはmailクラスを引数に取るdelivered_emailが走るのでここでログを吐く
# config/initializers/email_log_observer.rb class EmailLogObserver def delivered_email(email) msg = "from: #{email.from.join(',')} to: #{email.to.join(',')} subject: #{email.subject}" Rails.application.config.mail_logger.debug(msg) end end
で、最後にapp/mailers/application_mailer.rbのApplicationMailer宣言後に一行追記
class ApplicationMailer < ActionMailer::Base (略) end ActionMailer::Base.register_observer(EmailLogObserver.new)
これでメール送信時にlog/mail_development.log
にログが流れるはず