Laravel - 根据条件在未来发送邮件

时间:2017-04-13 11:31:20

标签: laravel email cron queue beanstalkd

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

我读到了关于beanstalkdqueuesDelayed Message Queueing的内容,现在看起来很适合:

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

但我对一些事情不太确定:

  1. 用户可以取消将来的日程安排。在这种情况下,如何取消将来发送的电子邮件。我可以在发送实际电子邮件之前在某个地方设置条件吗?在return false的{​​{1}}方法上尝试handle并开始抛出错误

  2. 我使用的是正确的方法。我还阅读了Scheduler,但我不知道如何取消未来的电子邮件(如果需要的话)

1 个答案:

答案 0 :(得分:1)

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

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

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

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