排队延迟,定时发送邮件
Queue delay , sending an email at a certain time
想要实现的是在选定的时间(由用户)发送和发送电子邮件
所以我的方法是计算时间差,然后将其作为队列的延迟时间。
但它似乎没有像我预期的那样工作
所有电子邮件都一起发送,而不是在正确的时间发送
控制器
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 带有队列功能的内置邮件功能。
可以参考Laravel Delay Mail Queue
EG:
Mail::later(5, 'emails.welcome', $data, function ($message) {
//
});
5 是延迟秒数。
想要实现的是在选定的时间(由用户)发送和发送电子邮件 所以我的方法是计算时间差,然后将其作为队列的延迟时间。
但它似乎没有像我预期的那样工作 所有电子邮件都一起发送,而不是在正确的时间发送
控制器
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 带有队列功能的内置邮件功能。 可以参考Laravel Delay Mail Queue
EG:
Mail::later(5, 'emails.welcome', $data, function ($message) {
//
});
5 是延迟秒数。