2015-07-09 6 views
2

Я пытаюсь отправить почту в очередь с помощью Laravel-5. Код, который я использую, приведен ниже. Я ожидал, что почта будет храниться в базе данных в таблице «jobs», но она просто будет отправлена ​​мгновенно.Laravel-5 Queuing mail

Mail::queue('emails.orderthankyou', ['first_name' => 'My Name'], function ($m) { 
    $m->to('[email protected]')->subject('Test'); 
}); 

Любая идея, что может быть неправильным здесь?

+0

Вы запускаете 'php artisan queue: listen' в фоновом режиме. Если вы являетесь электронной почтой, могут быть поставлены в очередь и обработаны задания, прежде чем вы сможете просматривать таблицу. –

+0

Вы правильно настроили очередь? По умолчанию используется драйвер 'sync', который запускается немедленно. – ceejayoz

ответ

2

Вместо этого вы, скорее всего, захотите использовать Mail::later.

http://laravel.com/docs/5.1/mail

Mail::later(5, 'emails.orderthankyou', ['first_name' => 'My Name'], function ($m) { 
    $m->to('[email protected]')->subject('Test'); 
}); 
+0

Спасибо, я просто попробовал это и все тот же результат ... – V4n1ll4

+0

5 в секундах, так что может показаться мгновенным .. Также вы, вероятно, неправильно истолковали очередь. Очередь предназначена для обработки задач один за другим. Вы не можете планировать задачи на определенную дату/время. – Luceos

+0

Так в чем разница между этим и хранением заданий в очереди в базе данных? – V4n1ll4

0

Задержка очереди сообщений

Если вы хотите отложить доставку в очередь сообщения электронной почты, вы можете использовать позже метод. Для начала, просто передать количество секунд, с помощью которого вы хотите отложить отправку сообщения в качестве первого аргумента метода:

Mail::later(5, 'emails.welcome', $data, function ($message) { 
//here 5 is the number of seconds 
}); 
2

Вы можете использовать sync драйвер (в config/queue.php). sync обозначает синхронный. Поэтому все задания выполняются мгновенно.

+0

Я подозреваю, что это ответ. 'sync' является значением по умолчанию. – ceejayoz