在未来的某个时候运行Cron工作,但只有一次(Laravel)



我必须在laravel中使用cron作业发送电子邮件,流程是用户将选择发送电子邮件的时间。一旦完成,那封电子邮件就会在那时发送,但只有一封,我们不必一遍又一遍地发送。

您可以使用delay方法调度作业
例如,此作业将在一天后运行:

dispatch(YourJob::class)->delay(now()->addDay());

关于延迟作业的文档参考https://laravel.com/docs/8.x/queues#delayed-调度

我建议使用Laravels队列,更具体地说是Mailer::laterMailer::laterOn方法。你可以延迟发送邮件,而且只执行一次。

YourMailable::later(now()->addMinutes(10))

或不带邮件:

Mail::later(now()->addMinutes(10), 'emails.view', $data, function ($message) {
//
});

您也可以在Mailable:中指定一个特定的队列

use IlluminateMailMailable;
class YourMailable extends Mailable
{
protected string $queue = 'mails-queue';
// ...
}

对于Mail facade,您可以使用laterOn方法:

Mail::laterOn('mails-queue', now()->addMinutes(10), 'emails.view', $data, function ($message) {
//
});

相关内容

  • 没有找到相关文章

最新更新