Задержка очереди, отправка электронной почты в определенное время

Чего хотите добиться — это отправить и отправить электронное письмо в выбранное время (пользователем)
поэтому мой подход заключался в том, чтобы рассчитать разницу во времени, а затем сделать это время задержки в очереди.

но, похоже, это не работает, как я ожидаю
все письма доставляются вместе, а не в нужное время

контроллер

    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)

Есть идеи, что здесь не так?
есть ли лучший подход? нравится использовать расписание? или что?

1

Решение

Один из подходов, который можно использовать для достижения задержки очереди для отправки электронной почты, заключается в использовании встроенной функции почты Laravel с функцией очереди.
Вы можете взять ссылку из Laravel Delay Mail Queue

НАПРИМЕР:

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

5 задерживается секунд.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]