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

Php 队列延迟,在特定时间发送电子邮件,php,laravel,email,queue,laravel-5.3,Php,Laravel,Email,Queue,Laravel 5.3,我们想要实现的是在选定的时间(由用户)发送和发送电子邮件 所以我的方法是计算时间差,然后计算队列上的延迟时间 但它似乎不像我预期的那样起作用 所有电子邮件都在一起发送,而不是在正确的时间发送 控制器 public function notifyme($add) { $created = Carbon::now()->addMinutes($add); $now = Carbon::now(); $days = 1440*$created->diff

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

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

控制器

    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)

你知道这里怎么了吗?
有更好的方法吗?比如使用时间表?或者什么?

实现发送电子邮件的队列延迟的方法之一是使用带有队列功能的Laravel内置邮件功能。 你可以参考

例如:


5是延迟秒。

您使用的延迟服务,在laravel上有一条消息,“注意:Amazon SQS服务的最大延迟时间为15分钟。”我使用的是本地环境。这与环境无关,与您使用的驱动程序有关。您可以在config/queue.phpoh上找到此消息。对不起,我使用的是数据库驱动程序,我已经在帖子里提到过了!我使用.env文件引用它,我使用laravel 5.3通知系统,并计划添加sms功能。因此,在我看来,这不是一个好办法。好吧,所以对于任何延迟的功能,您可以尝试在laravel中创建作业。请参阅:并在作业类下动态设置队列延迟值。希望这对你有帮助。我不确定我是否应该把这个标记为答案,但我想我的延迟时间是以分钟而不是秒计算的。现在一切都好了。谢谢
 Mail::later(5, 'emails.welcome', $data, function ($message) {
//
});