如何使用/围绕Gmail的SMTP出站发送限制?

时间:2009-03-09 14:19:55

标签: ruby-on-rails email smtp

我正在使用我的Gmail Apps for Domain帐户在我的rails应用程序中发送标准自动电子邮件(用户注册,忘记密码,通知管理员新评论等)的电子邮件,但我担心每封500封电子邮件谷歌设定的限额。

Google建议克服限制的一种方法是使用多个用户帐户。

所以,我已经设置了10个额外的gmail用户帐户(noreply1,noreply2,noreply3等) - 我想跟踪这些帐户中的任何一个在24小时内发送了500封电子邮件并相应地使用了空闲帐户。

如何动态设置:user_name中的ActionMailer::Base.smtp_settings值?

这是我当前的设置 - 注意:每次都从“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

4 个答案:

答案 0 :(得分:9)

您还可以在服务器上设置MTA并使用它来发送邮件。

这就是我们的工作。

您必须将服务器的IP添加为有效的IP,以便在您的域的SPF记录中发送电子邮件,以避免被标记为垃圾邮件。

这样做的另一个好处是,如果您这样做,您可以将电子邮件的发件人:地址设置为您的用户之一,而GMail无法做到这一点。

答案 1 :(得分:3)

将可用的用户名存储在数据库的表中,以及“last-modified”,“last-reset”和发送计数。然后,您可以在发送电子邮件时查询,以查找当前使用最少的电子邮件地址。然后递增发送的计数和最后修改的帐户。 'last-reset'值可用于清理代码,以便您每24小时重置一次计数。

这也可以轻松添加新的电子邮件帐户,退出您不再使用的帐户,在不同的应用程序中实施等等,因为它只是在数据库表中,您可以在需要时进行更改。

答案 2 :(得分:2)

您应该能够以与配置相同的方式在邮件程序中的哈希中设置:user_name元素,即通过执行以下操作:

ActionMailer::Base.smtp_settings[:user_name] = 'new_user_name'

虽然这可能需要一些额外的代码来强制重新加载任何内部动作邮件程序配置(我自己不测试)

答案 3 :(得分:0)

评论框对我的问题变得过于严格。动态更改ActionMailer::Base.smtp_settings哈希对我来说是预期的,所以我怀疑还有一些其他因素在起作用。有些事要尝试:

  1. 您使用的是TLS插件吗?我使用action_mailer_optional_tls和Rails 2.3.2以及Ruby 1.8.6。
  2. 正在写入日志/控制台的内容是什么?
  3. 您正在更改用户名而不是密码:所有的noreply帐户都使用相同的密码吗?
  4. 编辑:尝试更多内容

    我会仔细查看评论中提到的smtp_tls.rb文件,以确保没有任何硬编码。或者删除它并尝试我上面链接的插件。要使用它,您只需要将:tls => true添加到smtp_settings哈希。