我想根据他们设置的时间表向各种用户发送电子邮件。
我读过关于豆茎、队列和延迟消息队列的信息,现在看起来很适合:
$when = Carbon::now()->addMinutes($minutes); // i can calculate minutes at this moment
Mail::to($user)->later($when, new AppMailTestMail);
但我不太确定几件事:
用户可以取消将来的计划。在这种情况下,我如何取消将来应该发送的电子邮件。我可以在发送实际电子邮件之前在某个地方设置检查条件吗?尝试
return false
handle
AppMailTestMail
方法,并开始抛出错误我是否使用了正确的方法。我也读过关于调度程序的信息,但我不明白我将如何取消未来的电子邮件(如果需要的话(
有很多方法可以解决这个问题。就个人而言,我会按计划对电子邮件进行排队,而不是将它们添加到队列中以供以后使用。
因此,您每天(或小时或分钟(运行一次计划任务,该任务运行查询以选择哪些用户需要电子邮件,然后使用该结果集将作业添加到队列中以获取每个结果。
这样,如果用户取消订阅,您就不必担心删除已排队的作业。
Laravel提供了一个非常好的界面,用于创建计划作业(https://laravel.com/docs/5.4/scheduling(,然后可以通过cronjob调用。