2016-08-22 2 views
0

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

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

Контроллер

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}', '[email protected]'); 

.env

QUEUE_DRIVER="database" 

им с помощью Laravel 5.3 так что контроллер notifyme реализует контракт ShouldQueue.

теперь, когда я бегу php artisan queue:work или php artisan queue:listen и проверить это электронная почта отправка задерживается, но когда я сделать это снова, (в то время как первая работа по-прежнему задерживается) оба письма присылают вместе сразу или через некоторое время (не на right time $ add)

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

+0

Какое обслуживание вы используете для задержки, есть сообщение на laravel, что «Примечание: у службы Amazon SQS максимальное время задержки составляет 15 минут». –

+0

im using local envirment –

+0

это не о среде, это о том, какой драйвер вы используете. Вы найдете это на config/queue.php –

ответ

0

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

EG:

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

5 запаздывает секунд.

+0

im, используя систему уведомлений laravel 5.3, и планируя добавить sms-функционал тоже, потому что это не будет хорошим aproach, я думаю, что в моем случае –

+0

Итак, для любой отсроченной функциональности вы можете попробовать создать работу в laravel , : https://laravel.com/docs/5.1/queues#delayed-jobs и динамически установить значение задержки очереди в классе заданий. Надеюсь, это может вам помочь – Aarti

+0

чувак им, используя это уже я думаю! проверьте мой код –