Чего хотите добиться — это отправить и отправить электронное письмо в выбранное время (пользователем)
поэтому мой подход заключался в том, чтобы рассчитать разницу во времени, а затем сделать это время задержки в очереди.
но, похоже, это не работает, как я ожидаю
все письма доставляются вместе, а не в нужное время
контроллер
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');
.окр
QUEUE_DRIVER="database"
Я использую Laravel 5.3, так что notifyme
Контроллер реализует контракт ShouldQueue.
теперь, когда я бегу php artisan queue:work
или же php artisan queue:listen
и проверить это
отправка электронной почты задерживается, но когда я делаю это снова (пока первая работа все еще задерживается), оба письма отправляются вместе сразу или через некоторое время (не в нужное время $ add)
Есть идеи, что здесь не так?
есть ли лучший подход? нравится использовать расписание? или что?
Один из подходов, который можно использовать для достижения задержки очереди для отправки электронной почты, заключается в использовании встроенной функции почты Laravel с функцией очереди.
Вы можете взять ссылку из Laravel Delay Mail Queue
НАПРИМЕР:
Mail::later(5, 'emails.welcome', $data, function ($message) {
//
});
5 задерживается секунд.
Других решений пока нет …