Rails:ActionMailer的运行时配置?

时间:2009-07-14 12:39:49

标签: ruby-on-rails

我想通过Gmail从我的应用发送少量电子邮件。现在,SMTP设置将在运行时确定(即:来自数据库),可以这样做吗?

---编辑---

我可以在其中一个类方法中设置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 => "fabian@mydomain.com",
      :password => "password"
    }

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

我想在这里设置用户名和pw。

4 个答案:

答案 0 :(得分: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

在调用发送电子邮件的 mail()之前,您需要调用私有方法 init_email_account 来填充数据库中的smtp_settings。 shop_mail 是存储有关邮件帐户设置的数据的模型。

HTH

答案 1 :(得分:1)

您可以在控制器中执行此操作:

class ApplicationController < ActionController::Base

   ...

private

  def set_mailer_settings

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

  end

end

答案 2 :(得分:0)

由于配置文件都是Ruby,因此可以在运行时从配置文件等中轻松获取设置。

这是我在getting ActionMailer working with GMail SMTP上写的一篇文章。

注意:如果您使用的是rails 2.3和Ruby 1.87,则不需要插件,只需使用this comment中的设置

答案 3 :(得分:0)

假设您已在环境或初始值设定项中配置了smtp_settings,您可以像这样设置用户名:

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