Skip to main content

mailer_concerns_mixins

🧩 Extracting Reusable Mailer Concerns​

Encapsulate shared logic—like footers, localization, logging—into mailer concerns. This maintains dry mailers and simplifies changes across multiple mailers.

# app/mailers/concerns/signature_concern.rb
module SignatureConcern
extend ActiveSupport::Concern

included do
before_action :set_signature
end

private

def set_signature
@signature = current_organization.email_signature
end
end

# app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
include SignatureConcern
default from: -> { "#{current_organization.name} <no-reply@#{current_organization.domain}>" }
end

# app/views/user_mailer/welcome.html.erb
<p>Welcome!</p>
<p><%= @signature %></p>

Concerns avoid duplication and let you compose behaviors via include or prepend.