我正在尝试在事件触发时实施电子邮件通知。触发事件后,侦听器将触发通知,即电子邮件。
我没有实现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
答案 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());
}
}