首页 > 解决方案 > 通过 Rake 或 Active Job 自动为不同的受众批量发送电子邮件

问题描述

我有 3 组受众(每个受众 70 人),他们需要在特定时间向他们发送个性化的电子邮件。每封电子邮件都需要针对特定​​的受众进行定制:电子邮件的内容类似于:“Hi First_Name”您在受众 A 中,您将坐在“X 行,Y 座”等。

受众 A 需要在周四上午 10:00 发送电子邮件 1,在周五下午 2:00 发送电子邮件 2,在周六下午 12:00 发送电子邮件 3

受众 B 需要在周五上午 10:00 发送电子邮件 1,在周六下午 2:00 发送电子邮件 2,在周日下午 12:00 发送电子邮件 3

受众 C 需要在周六上午 10:00 发送电子邮件 1,在周日下午 2:00 发送电子邮件 2,在周一下午 12:00 发送电子邮件 3

自动化和批量发送这些电子邮件的正确“Rails-Way”是什么?某种自定义 rake 任务?还是一个 ActiveJob?或者我可以在网站上创建一个按钮,让票房工作人员只需点击网站上的一个按钮,它就会自动发送所有这些电子邮件?

我有一个 Rails 5 应用程序,它可以通过鼠标单击使用 Deliver_now 和 Mailgun 向所有受众发送电子邮件。我正在重构应用程序以更具体地分离受众并自动发送电子邮件。我对 ActiveJob 一无所知,而且我是个 Rails 菜鸟。

顾客控制器.rb

def audience_segment_A
    Patron.where(audience: A).pluck(:email).batch_send
end

def batch_send
    PatronMailer.send(email_1).deliver_now
    PatronMailer.send(email_2).deliver_later(wait: 26.hours)
    PatronMailer.send(email_3).deliver_later(wait: 22.hours)
end

我的代码没有个性化每封电子邮件(也不起作用),而且我不确定如何调用/启动此电子邮件发送过程。

标签: ruby-on-railsruby

解决方案


我会创建一个单独的表/模型来存储所有的电子邮件(也许Invitation)。添加两个新属性:状态(待处理/已发送)和 time_to_sent(日期时间)。然后运行一个 rake 脚本,查询表中所有仍待处理且需要发送的记录:

Invitation.where(status:pending).where('time_to_send < ?', DateTime.now)

然后发送所有这些邮件。发送成功后,相应地更新状态。

这可能比创建 Jobs 更可靠一些。我认为乔布斯应该用于需要立即发生的事情,但属于主线程,和/或不是业务关键。您希望 100% 确定电子邮件可能会被发送。


推荐阅读