ruby-on-rails - 通过 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
我的代码没有个性化每封电子邮件(也不起作用),而且我不确定如何调用/启动此电子邮件发送过程。
解决方案
我会创建一个单独的表/模型来存储所有的电子邮件(也许Invitation
)。添加两个新属性:状态(待处理/已发送)和 time_to_sent(日期时间)。然后运行一个 rake 脚本,查询表中所有仍待处理且需要发送的记录:
Invitation.where(status:pending).where('time_to_send < ?', DateTime.now)
然后发送所有这些邮件。发送成功后,相应地更新状态。
这可能比创建 Jobs 更可靠一些。我认为乔布斯应该用于需要立即发生的事情,但属于主线程,和/或不是业务关键。您希望 100% 确定电子邮件可能会被发送。
推荐阅读
- python - 如何将 Pydantic BaseModels 列表转换为 Pandas Dataframe
- react-native - 意外的令牌,应为“;” 开玩笑+酶反应原生
- operating-system - TestRealTime:如何使用 Rational Test Real Time 测试实时操作系统
- reactjs - ReactJS 在从 API 获取数据时重新渲染两次以上
- reactjs - TypeError:无法读取 null 的属性“图像”
- java - 如何在 dialogState == COMPLETED、Alexa delegateDialog 之后重新获得控制权
- stata - 修改图形中 X 轴的比例
- excel - 彭博 - 刷新工作簿如何调用
- typescript - TypeScript typeof 和类构造函数问题
- python - 未显示在 Azure 中部署的 Django 应用