Laravel 5.4 Queue Driver说电子邮件通知已处理,但电子邮件未发送

时间:2019-02-24 11:26:43

标签: laravel queue

我正在尝试在事件触发时实施电子邮件通知。触发事件后,侦听器将触发通知,即电子邮件。

我没有实现Queue时就发送电子邮件。如果我已实施队列方法,则不会发送电子邮件。

当我运行队列工作器时,它为我提供了以下内容。但是电子邮件没有发送。

[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'),

'connections'=> [

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

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

.env

QUEUE_DRIVER=database

1 个答案:

答案 0 :(得分:0)

上面代码中的问题是,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());   
    } 
 }