【发布时间】:2010-10-12 04:52:35
【问题描述】:
我正在使用我的 Gmail Apps for Domain 帐户在我的 rails 应用程序中发送标准自动电子邮件(用户注册、忘记密码、通知管理员新评论等)的电子邮件,但我担心每个 500 封电子邮件谷歌设置的天数限制。
Google 建议克服限制的一种方法是使用多个用户帐户。
所以,我已经设置了 10 个额外的 gmail 用户帐户(noreply1、noreply2、noreply3 等) - 我想跟踪这些帐户中的任何一个在 24 小时内何时发送了 500 封电子邮件,并相应地使用空闲帐户.
如何动态设置ActionMailer::Base.smtp_settings中的:user_name值?
这是我当前的设置 - 注意:这每次都从“noreply1”发送,即使我明确地将 :user_name 和 :from 设置为“noreply2”:
--- development.rb ---
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "mydomain.com",
:authentication => :plain,
:user_name => "noreply1@mydomain.com",
:password => "password"
}
--- account.rb --- (MODEL, called via a callback)
after_create :send_welcome_email
...
def send_welcome_email
#ActionMailer::Base.smtp_settings[:user_name] = 'noreply2@mydomain.com'
ActionMailer::Base.smtp_settings.merge!({:user_name => "noreply2@mydomain.com"})
SubscriptionNotifier.deliver_welcome(self)
end
--- subscription_notifier.rb --- (MODEL)
class SubscriptionNotifier < ActionMailer::Base
def welcome(account)
@sent_on = Time.now
@subject = "Welcome to the App"
@recipients = account.email
@from = "noreply2@mydomain.com"
@body = { :account => account }
end
end
【问题讨论】:
-
我认为 workmad3 改变 ActionMailer::Base.smtp_settings 散列的想法是正确的,我只是不知道如何让 rails 用我的动态设置重新加载该散列的值:user_name键。
-
您使用的是什么版本的 Rails?在控制器操作中动态更改 ActionMailer::Base.smtp_settings[:user_name] 在 2.3.2 中对我有用。 (至少,哈希值发生了变化。我没有尝试发送邮件。)
-
这很奇怪 - 哈希键值发生了变化,但电子邮件是使用我的 development.rb 文件中的原始 :user_name 发送的
-
甚至为我发送作品。您能否发布一些代码,准确显示您在控制器中的原始配置和更改是如何完成的?
-
肯定的 - 我会把它添加到上面的问题中......谢谢
标签: ruby-on-rails email smtp