2014-01-14 1 views
0

Я хочу отправить письма с разных учетных записей. загружаю мой счет электронной почты по умолчанию из инициализатора файла:Может ли кто-нибудь объяснить, как экземпляры почтовых отправлений Rails?

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: "[email protected]", subject: subj 
end 

Как вы можете видеть, изменение счета заключается в функции класса «sendAlert ». До того, как я его разместил, я попытался сделать это в «system_error_report», но это не сработало: self.smtp_settings alter работает только в статической функции класса. Я не понимаю, почему)
Может кто-нибудь решить вопрос?

ответ

0

Задайте свои smtp_settings в файлах среды, а не инициализаторах. Не изменяйте smtp_settings в классах Mailer, он изменит настройки для всех почтовых программ. Изменить настройки почтовых программ на экземпляр объекта:

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

Рассмотрим перемещение YAML файл загружен один раз в конфигурации, а затем извлекать только конфиг вместо загрузки файлов каждый раз, когда вы вызываете методы почтовой программы.

+0

(1) Я не хочу раскрывать свои пароли и логины для общедоступных git-серверов, поэтому я использую файлы YAML, которые исключаются из отслеживания git. (2) Я только что проверил: изменение в почтовом ящике подкласса ActionMailer :: Base не изменяется. ActionMailer :: Base.smtp_settings –

+0

Вы также можете использовать файлы YAML в файлах среды. – rodzyn