class ApplicationMailer < ActionMailer::Base default from: "Example.com " def process(name, *args) set_headers_for_sendgrid(name, args) super end private def set_headers_for_sendgrid(mailer_action, mailer_action_arg_values) mailer = self.class.name # parameters gives us e.g. [ [:req, :arg1 ], … ] with types and names. mailer_action_arg_names = method(mailer_action).parameters.map(&:last) # Turn e.g. [ "k1", "k2" ] and ["v1", "v2" ] into { "k1" => "v1", "k2" => "v2" } mailer_action_args = mailer_action_arg_names.zip(mailer_action_arg_values).to_h headers["X-SMTPAPI"] = { category: [ mailer, "#{mailer}##{mailer_action}" ], unique_args: { environment: Rails.env, arguments: mailer_action_args.to_json, } }.to_json end end