1

想要实现的是在选定的时间(由用户)发送和发送电子邮件,所以我的方法是计算时间差,然后在队列中计算延迟时间。

但它似乎不起作用,因为我希望所有电子邮件都一起发送而不是在正确的时间发送

控制器

    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)

知道这里有什么问题吗?有更好的方法吗?喜欢使用时间表?或者是什么?

4

1 回答 1

2

可以遵循一种方法来实现发送电子邮件的队列延迟是使用 Laravel 内置的邮件功能和队列设施。你可以参考Laravel 延迟邮件队列

例如:

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

5 是延迟秒。

于 2016-08-22T06:49:42.267 回答