Драйвер очереди Laravel 5.4 сообщает, что уведомление по электронной почте обработано, но письмо не отправлено - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь реализовать уведомление по электронной почте при возникновении события.Когда событие происходит, слушатель сгенерирует уведомление, которое является электронной почтой.

Электронная почта отправляется, когда я не реализовал очередь.Электронная почта не отправляется, если я реализовал подход с очередью.

Когда я запускаю работника очереди, он дает мне следующий результат.Но электронное письмо не отправляется.

[2019-02-24 11:10:25] Processing: App\Notifications\CustomRequestListener
[2019-02-24 11:10:25] Processed:  App\Notifications\CustomRequestListener

Я настроил слушателей, события, уведомления, как показано ниже.

Слушатель

 class CustomRequestListener 
 {   
    public function handle(CustomRequestCreated $event)   
    {
      $user->notify(new CustomRequestEmail());   
    } 
 }

Класс уведомлений

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;

class CustomRequestEmail extends Notification implements ShouldQueue
{
    use Queueable;

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->subject('Test Mail')
            ->view('layout.testmail.template');
    }
}

queue.php

'default' => env('QUEUE_DRIVER', 'database'),

'соединения' => [

    'sync' => [
        'driver' => 'sync',
    ],

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],

.env

QUEUE_DRIVER=database

1 Ответ

0 голосов
/ 24 февраля 2019

Проблема в вышеприведенном коде заключается в том, что shouldQueue реализован в классе уведомлений, где это действительно необходимо реализовать на слушателе.

Код, приведенный ниже, решил проблему.

Удалить ShouldQueue из уведомления

class CustomRequestEmail extends Notification
{
    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
          ->subject('Test Mail')
          ->view('layout.testmail.template');
    }
}

Добавить shouldQueue для слушателя

class CustomRequestListener implements ShouldQueue
 {   
    public function handle(CustomRequestCreated $event)   
    {
      $user->notify(new CustomRequestEmail());   
    } 
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...