首页 > 解决方案 > mailgun rails - 如何为每个 ActionMailer 定义 mailgun_settings

问题描述

我正在使用mailgun-ruby在我的 rails 应用程序中发送电子邮件。

我在我的 Mailgun 帐户上激活了多个域,并且我希望为每个 ActionMailer 选择一个特定的域来发送电子邮件。

gem 的文档只解释了设置 mailgun_settings 的全局方法:

config.action_mailer.delivery_method  = :mailgun
config.action_mailer.mailgun_settings = {
  api_key: 'api-myapikey',
  domain:  'mydomain.com'
}

有什么建议可以通过 ActionMailer 完成吗?

标签: ruby-on-railsactionmailermailgun

解决方案


为此,我想出了一个自制的设计:

class ApplicationMailer < ActionMailer::Base
  before_action do
    @layout  = 'mailer'
    @from    = 'default@domain.com'
    @to      = 'default_to@domain.com'
    @subject = 'Default Subject'
    @domain  = 'default.domain.com'
    @params  = {}
  end

  after_action do
    ac = ActionController::Base.new()
    mg = Mailgun::Client.new 'key-xxxxxxxxx'
    message_params =  { 
      from:    @from,
      to:      @to,
      subject: @subject,
      text:    ac.render_to_string("#{self.class.to_s.underscore}/#{action_name}.text", layout: @layout, locals: @params),
      html:    ac.render_to_string("#{self.class.to_s.underscore}/#{action_name}.html", layout: @layout, locals: @params)
    }
    mg.send_message @domain, message_params
  end
end


class UserMailer < ApplicationMailer
  before_action do
    @from = 'Domain <updates@domain.com>'
    @domain = 'updates.domain.com'
  end

  def test
    @to = "yourself@gmail.com"
    @subject = "Test"
    @params = {}
  end
end

自定义user_mailer/test.txt.erbuser_mailer/test.html.erb发送电子邮件:

 UserMailer.test

推荐阅读