排队延迟,在特定时间发送电子邮件



要实现的是发送和电子邮件,在一个选定的时间(由用户)因此,我的方法是计算时差,然后使其成为队列上的延迟时间。

但它似乎不像我期望的那样工作所有的邮件都在一起发送,但不是在正确的时间

控制器

    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:workphp artisan queue:listen并测试此邮件发送延迟了,但当我再次发送时,(而第一个任务仍然延迟)两个邮件立即或稍后(不是在正确的时间$add)一起发送

你知道这是怎么回事吗?有没有更好的方法?比如使用时间表?还是别的什么?

实现发送邮件Queue delay的方法之一是使用带有Queue facility的Laravel内置Mail功能。您可以参考Laravel延迟邮件队列

,

 Mail::later(5, 'emails.welcome', $data, function ($message) {
//
});

最新更新