2009-07-14 5 views
4

Я хотел бы отправить небольшое количество писем из моего приложения через Gmail. Теперь настройки SMTP будут определены во время выполнения (т. Е. Из db), можно ли это сделать?Rails: настройка времени выполнения ActionMailer?

--- редактировать ---

я могу установить подкласс ActionMailer (названный Notifier) ​​настройки SMTP в одном из методов класса. Таким образом, я могу установить имя пользователя и пароль для динамического отправки электронной почты. Единственное, что вы должны установить ВСЕ smtp_settings. Можно ли установить только имя пользователя & параметров пароля в методе класса?

Это код, я использую сейчас, он посылает:

class Notifier < ActionMailer::Base 
    def call(user) 
    Notifier.smtp_settings = { 
     :enable_starttls_auto => true, 
     :address => "smtp.gmail.com", 
     :port => "587", 
     :domain => "mydomain.com", 
     :authentication => :plain, 
     :user_name => "[email protected]", 
     :password => "password" 
    } 

    recipients user.email 
    subject "Test test" 
    body  "Test" 
    end 
end 

Я хотел бы просто установить имя пользователя и здесь PW.

ответ

0

Поскольку все файлы конфигурации являются Ruby, тогда настройки могут быть легко извлечены из файла конфигурации или т.п. во время выполнения.

Вот сообщение, которое я написал некоторое время назад на getting ActionMailer working with GMail SMTP.

Примечание: Если вы используете рельсы 2.3 и Ruby, 1.87, вам не нужен плагин и может просто использовать настройки this comment

+0

Yip я видел, что :) я уже объяснял дальше, мне нужно, чтобы иметь возможность динамически установить ACCOUNTNAME & pw во время выполнения (т. е. из db) ... Мне было интересно, есть ли простой способ сделать это :) – Fabian

0

Предполагая, что вы настроили smtp_settings в вашей среде или инициализаторах, вы можно просто установить имя пользователя следующим образом:

Notifier.smpt_settings.merge!({:user_name => "x", :password=> "y"}) 
2

(Rails 3)

Поскольку я называю почтовик так:

CustomerMailer.customer_auto_inform(@form).deliver 

В классе CustomerMailer у меня есть частный метод:

def init_email_account(shop_mail) 
    ActionMailer::Base.raise_delivery_errors = true 
    ActionMailer::Base.smtp_settings = { 
    :address    => shop_mail.address, 
    :port     => shop_mail.port, 
    :domain    => shop_mail.domain, 
    :user_name   => shop_mail.user_name, 
    :password    => shop_mail.password, 
    :authentication  => shop_mail.authentication.name, 
    :enable_starttls_auto => shop_mail.enable_starttls_auto 
    } 
end 

перед вызовом почты() который отправляет по электронной почте вам нужно вызвать частный метод init_email_account для заполнения smtp_settings из базы данных. shop_mail - это модель, в которой хранятся данные о настройках учетной записи электронной почты.

НТН

1

Вы можете сделать это в контроллере:

class ApplicationController < ActionController::Base 

    ... 

private 

    def set_mailer_settings 

    ActionMailer::Base.smtp_settings.merge!({ 
     username: 'username', 
     password: 'yoursupersecretpassword' 
    }) 

    end 

end 
Смежные вопросы