任何人都可以解释Rails如何实例化邮件对象?

时间:2014-01-14 10:48:06

标签: ruby-on-rails mailer

我想从不同的帐户发送邮件。 我从初始化文件中加载了我的默认电子邮件帐户:

if Rails.env != 'test'
    ....
    email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml"))
    ActionMailer::Base.smtp_settings = email_settings[Rails.env].symbolize_keys unless email_settings[Rails.env].nil?
end

但对于某些邮寄者,我想从特殊帐户发送邮件:

def self.sendAlert(subj, message)
    self.smtp_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email_bot.yml"))[Rails.env].symbolize_keys
    system_error_report(subj, message).deliver
end

def system_error_report(subj, message)
    @message = message
    mail to: "estarshono@gmail.com", subject: subj
end

如您所见,帐户更改位于类函数“sendAlert”中。在我把它放在那里之前,我尝试在'system_error_report'中进行,但它不起作用:self.smtp_settings alter仅在静态类函数中起作用。我不明白为什么)
有人可以清楚这个问题吗?

1 个答案:

答案 0 :(得分:0)

在环境文件中设置smtp_settings,而不是初始化程序。 不要在Mailer类中更改smtp_settings,它将更改所有邮件程序的设置。 更改每个对象实例的邮件程序设置:

smtp_settings = YAML::load(...)
mailer.delivery_method.settings.merge! smtp_settings

考虑将YAML加载的文件移入配置,然后每次调用邮件程序方法时只检索配置而不是加载文件。