PIYO - Tech & Life -

Railsでメールにプレフィックスつけるgem email_prefixer

Rails gem

メール送るときにプレフィックスつけたいときあるじゃないですか。サービス名だったり、ステージング用でテストするためのメールだったり。

で、1個1個subjectに設定するのは面倒だし忘れてしまいがちなので、email_prefixerを使っています。

https://github.com/wireframe/email_prefixer

Railsへの導入はgemの追加とinitializersへの設定ファイルの追加です。

config/intitializers/email_prefixer.rb的なファイルを作って、必要な設定を書いておきます。

たとえばこんな感じで、envごとにプレフィックスを変えて送れます。

EmailPrefixer.configure do |config|
  if Rails.env.production? or Rails.env.test?
    config.builder = -> { '【サービス名】' }
  elsif Rails.env.staging?
    config.builder = -> { '【staging】' }
  elsif Rails.env.development?
    config.builder = -> { '【development】' }
  end
end

メールを送る側は例えばこんな感じ(↓)になると思います。subjectにはプレフィックス以外の部分を指定します。

def invited(user)
  @user = user
  mail to: @user.email, subject: '招待されました'
end

実際に送られるメールのタイトルは環境によって

  • 【サービス名】招待されました
  • 【staging】招待されました
  • 【development】招待されました

みたいな感じで勝手に分かれてくれます。プレフィックスをつけたいだけの場合(環境毎に区別しない場合)でも一箇所でDRYにできるので便利です。

仕組み的にはActionMailerが提供するフック、ActionMailer::Base.register_interceptorを使って、プレフィックスをつける処理を差し込むだけで割とシンプルな実装です。

Railsガイドにも載っています。

https://railsguides.jp/action_mailer_basics.html#%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E9%85%8D%E4%BF%A1%E7%9B%B4%E5%89%8D%E3%81%AB%E5%8A%A0%E5%B7%A5%E3%81%99%E3%82%8B

これを使えばpostfixerも作れますね。要らないけどね。