要实现的是发送和电子邮件,在一个选定的时间(由用户)因此,我的方法是计算时差,然后使其成为队列上的延迟时间。
但它似乎不像我期望的那样工作所有的邮件都在一起发送,但不是在正确的时间
控制器 public function notifyme($add)
{
$created = Carbon::now()->addMinutes($add);
$now = Carbon::now();
$days = 1440*$created->diff($now)->days;
$hours = 60*$created->diff($now)->h;
$minutes = $days + $hours + $created->diff($now)->i;
$user = Auth::user();
$user->notify((new notifyme($user))->delay($minutes));
return redirect('/notif');
}
Route::get('notifyme/{add}', 'HomeController@notifyme');
。env
QUEUE_DRIVER="database"
我使用的是laravel 5.3,所以notifyme
控制器实现了ShouldQueue协议。
现在当我运行php artisan queue:work
或php artisan queue:listen
并测试此邮件发送延迟了,但当我再次发送时,(而第一个任务仍然延迟)两个邮件立即或稍后(不是在正确的时间$add)一起发送
你知道这是怎么回事吗?有没有更好的方法?比如使用时间表?还是别的什么?
实现发送邮件Queue delay的方法之一是使用带有Queue facility的Laravel内置Mail功能。您可以参考Laravel延迟邮件队列
,
Mail::later(5, 'emails.welcome', $data, function ($message) {
//
});