用于在 rails 中发送后台电子邮件的外部 Web 服务

External web service for sending background emails in rails

我已经使用 this instructions 并向我的注册用户发送了 "Welcome" 邮件。但这会让用户等待 5-8 秒,因为服务器正在尝试完成此邮件事情。

我不希望用户等到邮件发送后立即看到 "Mail has sent" 消息。所以这给我带来了 Rails 的后台工作。 Rails 中有很多选项,例如 delayed_job、Resque 等用于后台作业。但是据我所知,要使用这些解决方案:

1- 创建后台作业 2- 运行 这份工作

假设我使用了一种后台作业解决方案,那么我还需要其他东西来 运行 这个作业,比如 cron 作业...

我认为仅针对发送注册和密码提醒电子邮件,应该有另一种更简单的解决方案。我的意思是,就像另一个外部服务一样,1- 我将为要发送的每种邮件创建一个模板,2- 我将传递一些参数,例如 receiver_email、template_id、receiver_username, password_link 等等...这样我就不需要任何后台作业了,用户也不会等待。

我遇到了其他一些名为 "sucher_punch" 的 gem,但据我从人们的消息和发布的问题中了解到,使用 heroku 时,由于 heroku 的某些原因,此 gem 可能会失败dynos和邮件可能发不出去,你不知道

无论如何,rails 开发人员处理此电子邮件问题的一般方式是什么?也许我也可以像上面解释的那样使用 sendgrid,可以吗?

在后台发送电子邮件是一个常见的用例,Rails 4.2 在 ActionMailer 中引入了 #deliver_later 方法以提供无缝 ActiveJob 集成。

您不需要设置 cron 作业来检查后台队列中是否有任何作业。 Sidekiq、Resque 或 DelayedJob 会为您处理。

似乎 Sendgrid 确实允许 creating templates 并发送变量内容来填充它们,但该功能不会破坏异步调用的好处。事实上,将其推迟到后台还有一个额外的好处,即如果外部资源 (Sendgrid) 不可用,则不会中断用户体验。

您应该尝试安装您提到的后台处理解决方案之一(我推荐 sidekiq) and take advantage of the ActionMailer + ActiveJob integration