メール送るときにプレフィックスつけたいときあるじゃないですか。サービス名だったり、ステージング用でテストするためのメールだったり。
で、1個1個subjectに設定するのは面倒だし忘れてしまいがちなので、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ガイドにも載っています。
これを使えばpostfixerも作れますね。要らないけどね。