Laravel - 将来根据条件发送邮件

Laravel - Send Mail in Future based on condition

我想根据不同用户设置的时间表向他们发送电子邮件。

我阅读了有关 beanstalkd, queues and Delayed Message Queueing 的内容,目前看来适合:

$when = Carbon::now()->addMinutes($minutes); // i can calculate minutes at this moment
\Mail::to($user)->later($when, new \App\Mail\TestMail);

但我不太确定一些事情:

  1. 用户可以取消未来的计划。在那种情况下,我该如何取消将来应该发送的电子邮件。我可以在发送实际电子邮件之前在某处设置条件以进行检查吗?在 \App\Mail\TestMailhandle 方法上尝试了 return false,它开始抛出错误

  2. 我使用的方法正确吗?我还阅读了有关 Scheduler 的内容,但我不知道如何取消以后的电子邮件(如果需要的话)

有很多方法可以解决这个问题。就个人而言,我会按计划将电子邮件排队,而不是将它们添加到队列中以备后用。

因此,您 运行 每天(或小时、或分钟)执行一次计划任务,其中 运行 查询 select 哪些用户需要电子邮件,然后使用该结果集,您为每个结果向队列中添加一个作业。

这样,如果用户取消订阅,您就不必担心删除已经排队的作业。

Laravel 为创建计划作业 (https://laravel.com/docs/5.4/scheduling) 提供了一个非常好的界面,然后可以通过 cronjob 调用它。