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

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

wireframe/email_prefixer
Contribute to wireframe/email_prefixer development by creating an account on GitHub.

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ガイドにも載っています。

Action Mailer の基礎 | Rails ガイド
Railsガイドは、Ruby on Rails Guidesに基づいた大型リファレンスガイドです。Rails開発の生産性を高めたいときや、Railsの各機能を体系的に学びたいときに役立ちます。

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