ActionMailerで配信前にメールの宛先を変更する

Railsガイドを読んだことある人であれば知っていると思いますが、ActionMailerにはregister_interceptorというメソッドがあり、これに特定のクラスを登録することで、メール配信前のフックを実現することができます。
参考: メールを配信直前に加工する
今回は、それのお話。

配信前に宛先を変更する


Railsガイドに書いてあることと内容が全く同じなので、余り意味がないかもしれません。
基本的には以下のステップで書きます。

  1. フック用のクラスを作成する
  2. register_interceptorにフック用のクラスを渡す

です。

フック用のクラスを作成する


ここでやることは、以下になります。

  • delivering_emailメソッドを定義する
  • メソッド内で宛先を書き換える

それをまとめると、以下の用になります。

class TestEmailInterceptor
  def self.delivering_email(message)  # クラスメソッドとして定義する
    message.to = ["test@example.com"] # 宛先を書き換える
  end
end

このようになります。
簡単ですね。

delivering_emailの中では、まだ送信が確定されていないため、色々な加工をすることができます。(後日そのあたりを使った記事を書こうかと)

register_interceptorにフック用のクラスを渡す


ここでやることは、以下になります。

  • config/initializersに適当なファイルを用意する
  • register_interceptorの引数に、フック用のクラスを渡す

今回は、config/initializers/test_email_interceptor.rbに定義することにします。

ActionMailer::Base.register_interceptor(TestEmailInterceptor) if Rails.env.test?

のような形です。
最後にifをつけるのかどうかは、どういった処理にしたいかによるかと思います。

最後に


Railsガイドと全く同じと言っても良い記事になってしまいました。
自分のメモ用の記事として書いてみました。
途中でも書いた通り、後日今回のフックでメールのちょっとした配信制御などを記事にしようかなと思います。

コメント

このブログの人気の投稿

新生活始まります

ElasticIPを複数利用する時の注意

タスクの実行結果をwhenで指定するならcheck_modeつける