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) {
//
});