动态设计发件人电子邮件地址

时间:2013-07-04 07:21:20

标签: ruby-on-rails ruby devise actionmailer

在用户模型中,每个用户都属于不同的域/主机。我想根据用户的域名将其设置为与地址不同。我可以在某个地方的用户模型中设置它,或者如何根据用户的域使发件人地址动态。

我们在app/config/initializer/devise.rb中设置了默认发件人地址

Devise.setup do |config|
  config.mailer_sender = SOME EMAIL ADDRESS
end

3 个答案:

答案 0 :(得分:8)

我碰到了这个,因为我想从I18n中提取from地址,但初始化程序在I18n设置之前运行。这对我来说是最简单的解决方案:

config.mailer_sender = Proc.new { I18n.t('mailers.from') }

答案 1 :(得分:2)

要使用Devise的Mailer帮助程序功能,请扩展设计邮件程序,并覆盖需要不同动态发件人的方法/邮件:

class CustomDeviseMailer < Devise::Mailer
  def confirmation_instructions(record, token, opts={})
    @token = token
    opts[:from] = "Dynamic Sender <dynamic@foo.com>"
    devise_mail(record, :confirmation_instructions, opts)
  end
end

并在devise.rb中配置它:

config.mailer = "CustomDeviseMailer"

注意:如果您不需要动态发件人,只需在devise.rb中定义发件人:

config.mailer_sender = "Static sender <static@foo.com>"

答案 2 :(得分:1)

您可以根据电子邮件设置mail.from

class UserMailer <ActionMailer::Base

def notification_email(user)
  mail(to:example@example.com, from:user.email, ...)
end

这将覆盖您的默认设置。

我认为您可以在config / initializers / devise.rb中更改此设置

  # Configure the class responsible to send e-mails.
  # config.mailer = "Devise::Mailer"
   config.mailer = "UserMailer"

到您的自定义邮件程序。