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