Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 谁能解释一下Rails';实例化邮件对象?_Ruby On Rails_Mailer - Fatal编程技术网

Ruby on rails 谁能解释一下Rails';实例化邮件对象?

Ruby on rails 谁能解释一下Rails';实例化邮件对象?,ruby-on-rails,mailer,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_setting

我想从不同的帐户发送邮件。 我从初始值设定项文件加载默认电子邮件帐户:

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”中。在我把它放在那里之前,我试着在“系统错误报告”中这样做,但它不起作用:self.smtp\u settings alter只在静态类函数中起作用。我不明白为什么)

有人能澄清这个问题吗?

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

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

考虑将YAML加载的文件一次性移动到配置中,然后在每次调用mailer方法时只检索配置,而不是加载文件。

(1)我不想向公共git服务器公开我的密码和登录,因此我使用YAML文件,这些文件不在git跟踪范围内。(2) 我刚刚检查:ActionMailer::Base的子类的mailer中的更改不会更改ActionMailer::Base.smtp\u设置您也可以在环境文件中使用YAML文件。