ruby-on-rails - 错误 : too many emails per second on Heroku

标签 ruby-on-rails email heroku smtp

我在 Heroku 上安装了 Rails 4 应用程序,通过 deliver_later 发送电子邮件。 Sidekiq 正在运行和工作,我的配置中有 config.active_job.queue_adapter = :sidekiq

我还在日志 [ActiveJob] [ActionMailer::DeliveryJob] 中看到了这一点,这让我相信电子邮件是作为后台作业发送的。

那么,为什么我仍然会收到有关每秒电子邮件过多的错误消息?

Net::SMTPUnknownError: could not get 3xx (550: 550 5.7.0 Requested action not taken: too many emails per second

我刚刚注意到我将 sidekiq 并发设置为 3。也许这就是问题所在?

最佳答案

这不会与 Sidekiq 相关(嗯,无论如何不会直接相关)。这与您使用的任何 SMTP 服务器和服务器的速率限制有关。如果您有多个 Sidekiq 实例几乎同时发送电子邮件,并且您的速率限制相对较低,则可能会抛出此错误。

例如,如果您在开发或临时环境中使用 Mailtrap 作为 SMTP 服务器,则免费帐户每秒限制为 2 封电子邮件。很容易遇到这个错误。

如果出于您的目的您无法避免遇到此问题,您可以通过使用 ActionMailer 的 deliver_later method 关键字参数“等待”来尝试一些不同的策略。 ,例如:

users_i_need_to_email.each_with_index do |user, index|
  t = 5 * index
  UserMailer.send_important_stuff(user)
            .deliver_later(wait: t.seconds)
end

如果您的 :deliver_later 调用在不同的进程或流中运行,您可以通过随机化传递时间(例如,随机时间长达 5 分钟)来摆脱困境。

显然,上述两种解决方案都不是充分的证据,因此您最好使用适合您的目的的 SMTP 服务器。

关于ruby-on-rails - 错误 : too many emails per second on Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39237921/

相关文章:

jquery - 你可以在 Rails 的自定义 javascript 文件中使用嵌入的 ruby​​ 吗?

heroku - Heroku上的dyno小时到底是什么?

ruby-on-rails - Missing from-clause entry for table/undefined table 错误

ruby - 使用 RVM 在将部署在 Heroku 上的 Rails 应用程序中指定 Ruby 版本的正确方法是什么?

javascript - 在 Rails 3.1 中如何将 CoffeeScript(或 JavaScript)的执行限制为特定的 Controller 和操作?

ruby-on-rails - Rails 3 中的子域 cookie 共享不起作用(在 Heroku 上)?

ruby-on-rails - 将日期解析为 Rails 友好的格式

ios - 为什么我在 iOS 邮件应用程序中的电子邮件预览文本中有一个换行符?

email - 将邮件发送到 gmail 时,带有 href 的 anchor 标记作为 http 以外的 anchor 标记不起作用

Java:将电子邮件发送到非 ASCII 电子邮件地址