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

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

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

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

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

这是我当前的设置 – 注意:每次都从“noreply1”发送,即使我明确地设置:user_name和:from 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  account } end end 

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

这就是我们的工作。

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

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

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

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

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

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

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

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

  1. 你在使用TLS插件吗? 我在Rails 2.3.2和Ruby 1.8.6中使用了action_mailer_optional_tls 。
  2. 正在写入日志/控制台的是什么?
  3. 您正在更改用户名但不更改密码:所有noreply帐户都使用相同的密码吗?

编辑:更多的事情要尝试

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