Rails: конфигурация во время выполнения ActionMailer? - PullRequest
4 голосов
/ 14 июля 2009

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

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

Я могу установить параметры smtp подкласса ActionMailer (с именем Notifier) ​​в одном из методов класса. Таким образом, я могу установить имя пользователя и пароль для динамической отправки электронной почты. Единственное, что вы должны установить ВСЕ 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 => "fabian@mydomain.com",
      :password => "password"
    }

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

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

Ответы [ 4 ]

2 голосов
/ 04 октября 2011

(Рельсы 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

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

НТН

1 голос
/ 23 апреля 2014

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

class ApplicationController < ActionController::Base

   ...

private

  def set_mailer_settings

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

  end

end
0 голосов
/ 13 февраля 2011

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

Notifier.smpt_settings.merge!({:user_name => "x", :password=> "y"})
0 голосов
/ 14 июля 2009

Поскольку все файлы конфигурации - это Ruby, настройки можно легко получить из файла конфигурации и т. П. Во время выполнения.

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

ПРИМЕЧАНИЕ: если вы используете rails 2.3 и Ruby 1.87, вам не нужен плагин, и вы можете просто использовать настройки в этом комментарии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...