通过RoR应用程序向用户发送电子邮件

| 我正处于构建基于论坛/问答社区的应用程序的最后阶段,我想添加电子邮件通知。该应用程序具有几个不同的实体,包括:主题,问题,项目,照片等。目标是用户可以“订阅”任何数量的这些实体,只要该实体收到新评论或活动。此功能与Facebook和论坛非常相似。 我研究了ActionMailer(包含rake任务和延迟的作业),MailChimp API(和插件)以及其他应用程序邮件(PostageApp和Postmark)。 我倾向于ActionMailer,因为存在内存占用和服务器过载的潜在问题。该应用程序将在Heroku上运行,但恐怕服务器很容易不知所措,每隔几分钟就会发送出数百封电子邮件。 另一个复杂性是根据用户的喜好会有不同类型的订阅(即时电子邮件通知,每日电子邮件通知)。 像这样管理电子邮件的最佳方法是什么?任何提示/想法将不胜感激!     
已邀请:
您可以使用ActionMailer与SendGrid或邮戳一起发送。 PostageApp仍然需要SMTP服务器并添加其他依赖项,但是拥有它可能很好。我相信MailChimp仅用于新闻通讯,因此在这里对您来说用处不大。 在这里给出高层次的概述,以下几点很重要: 避免使邮件逻辑变得混乱。 防止延迟对用户请求的响应。 避免出现“应用程序过载”的问题。 处理基于事件和定期的电子邮件。 要解决#1问题,您将需要使用观察员来决定何时发送基于事件的电子邮件。要说明#2和#3,可以放入DelayedJob,以便在后台发送电子邮件。您可以轻松地在Heroku上将SendGrid与ActionMailer结合使用(特别是如果您放入Pony的话)。对于#4,您应该像处理“观察者”一样,创建一个rake任务来处理决定谁发电子邮件并将发送作业排入队列的业务逻辑。 需要明确的是,DelayedJob将在单独的进程中执行作业。就Heroku而言,您实际上是在不同的Dyno中运行每个DelayedJob工作程序,而Dyno是一个完全独立的堆栈/环境(很可能在不同的物理服务器上)。这样,您的应用程序将不会有任何问题,除非您的数据库当然不能跟上添加作业的步伐(在这种情况下,您可以将Redis用作DJ存储)。您可以根据需要添加更多DJ工作人员,轻松地水平扩展。     
看一下SimpleWorker,这是一个基于云的后台处理/工作队列。 它是Heroku的附加组件,可以扩展和扩展以处理一组一次性帖子或计划发送的电子邮件。 (例如,可以安排一个主作业,然后在不按计划运行时,它将10s,100s,1000s作业排队,以便在扩展的基础架构中同时运行。) Heroku工作人员可以将其作为单独的进程运行,因此它们可以很好地工作,但是如果您具有可变的负载,那么您想要一种可以根据工作规模进行扩展和缩减的服务-因此您a)不为未使用的容量付费b)可以处理突发流量和批量输出。 (披露:我为公司工作。)     

要回复问题请先登录注册