【问题标题】:Average time to send 1 email (Heroku Rails 3 ActionMailer > Google Apps via SMTP)发送 1 封电子邮件的平均时间(Heroku Rails 3 ActionMailer > Google Apps via SMTP)
【发布时间】:2012-06-17 12:12:51
【问题描述】:

我平均每封电子邮件大约 2000 毫秒。 这正常吗?你能举一些你的应用程序中的例子吗?电子邮件可以正常发送。我知道我可能应该使用 DelayedJob 或 SendGrid 之类的 SMTP 中继,但我猜它的时间太长了,而且存在潜在问题。

2012-06-13T21:28:55+00:00 app web.1 - - Sent mail to ... (7856ms)
2012-06-13T21:28:57+00:00 app web.1 - - Sent mail to ... (2003ms)
2012-06-13T22:24:42+00:00 app web.1 - - Sent mail to ... (3094ms)
2012-06-13T22:24:43+00:00 app web.1 - - Sent mail to ... (1722ms)
2012-06-14T02:20:37+00:00 app web.1 - - Sent mail to ... (5932ms)
2012-06-14T02:22:16+00:00 app web.1 - - Sent mail to ... (1830ms)
2012-06-14T02:22:18+00:00 app web.1 - - Sent mail to ... (1740ms)

如果没有,我该如何调试需要这么长时间的东西?

(顺便说一句,logentries 为收集这些数据而震惊)

我的 SMTP 设置:

ActionMailer::Base.smtp_settings = {
  :address => "smtp.gmail.com",
  :port => 587,
  :domain => "example.com",
  :authentication => "plain",
  :user_name => "mail@example.com",
  :password => "...",
  :enable_starttls_auto => true 
}

【问题讨论】:

    标签: ruby-on-rails-3 heroku smtp actionmailer google-apps


    【解决方案1】:

    不,这是平均水平。我有一个在强大的服务器、我自己的机器,甚至是一个简单的低端服务器上运行的应用程序,它们通常总是在大约同一时间运行以发送它。它与与 Google 或您发送信息的人交谈时的身份验证有关。

    用户点击我屏幕上的电子邮件按钮后,我的应用程序会立即发送电子邮件,然后需要一两秒钟的时间才会在屏幕上弹出警报,让我知道它已成功发送。我正在使用与我的业务相关联的 Google Apps Gmail 帐户,该帐户与我的 Rails 项目的 ActionMailer::Base.smtp_settings 中列出的信息相同。

    原因通常是因为它正在连接到 Google,对其进行身份验证并让 google 将其发送出去。

    如果使用 Linux 或 Mac,从技术上讲,您可以在自己的服务器上使用 sendmail。 Sendmail 工作得更快,因为它是从服务器本身发送的,而不是连接到谷歌然后进行身份验证。

    在发送大量邮件(如新闻信函等)时,我已为客户端计算机执行此操作。这种方法的问题在于,电子邮件的标头没有来自真正的邮件服务器(如 Gmail、Hotmail 等)的任何身份验证,证明发送它的人实际上是从 google/hotmail/etc 服务器发送的,有时可以被视为垃圾邮件,因为它不是真正的真实。有很多关于如何做到这一点的指南,比如我刚刚找到的这个:

    http://raflabs.com/blogs/silence-is-foo/2011/02/07/configuring-rails-3s-actionmailer-work-sendmail-debian/

    您可以使用许多其他方法,这取决于您的工作方式。

    请注意,如果您走这条路,您的邮件可能会被视为垃圾邮件。如果客户知道他们会得到它,它通常会通过就好了。

    如果您仍然想使用您当前使用的方法发送邮件,我建议您让邮件由后台队列处理,这样会更快并且不会对用户造成任何延迟使用您的应用程序。

    希望对您的问题有所帮助并回答。

    【讨论】:

    • 那么你最终会推荐什么?听起来像:create background job > send email with google smtp > passes through sendgrid smtp relay
    • 是的。我总是建议使用某种后台排队工作,它可以让事情变得非常高效。至于发送,如果您需要更快,因为大量的电子邮件列表,那么使用 sendmail 或 sendgrid 并从您的服务器进行是理想的。只是不要被列入垃圾邮件服务器的黑名单。如果您不关心时间,因为您一次只发送几个,或者担心您的电子邮件被视为垃圾邮件,那么请使用谷歌路线。我会先尝试 sendmail/sendgrid 方法,看看它是否能给您带来任何额外的改进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2012-04-21
    • 2011-05-03
    • 2014-12-31
    • 2011-08-11
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多