我必须在laravel中使用cron作业发送电子邮件,流程是用户将选择发送电子邮件的时间。一旦完成,那封电子邮件就会在那时发送,但只有一封,我们不必一遍又一遍地发送。
您可以使用delay
方法调度作业
例如,此作业将在一天后运行:
dispatch(YourJob::class)->delay(now()->addDay());
关于延迟作业的文档参考https://laravel.com/docs/8.x/queues#delayed-调度
我建议使用Laravels队列,更具体地说是Mailer::later
和Mailer::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) {
//
});