Как проверить, успешно ли отправлена ​​почта или нет, и сохранить статус в уведомлении laravel?

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

public function via($notifiable)
{
    return ['mail', DbChannel::class];
}

public function toMail($notifiable)
{
    return (new MailMessage)
        ->from('[email protected]', 'Example')
        ->line('...');
}

person fatemeh sadeghi    schedule 13.07.2020    source источник


Ответы (1)


чтобы справиться с этим, вы можете определить слушателя и событие. вы сначала регистрируете его в App\Providers\EventServiceProvider

protected $listen = [
    'App\Events\Event' => [
        'App\Listeners\EventListener',
    ],
    'Illuminate\Mail\Events\MessageSending' => [
        'App\Listeners\LogSendingMessage',
    ],
    'Illuminate\Mail\Events\MessageSent' => [
        'App\Listeners\LogSentMessage',
    ],
];

а затем в App\Listeners\LogSendingMessage сохраните статус отправки. Например

   public function handle(MessageSending $event)
{
    $notification = Notification::where('id',$event->data['notification']->id)->first();
    $notification->status = "Sending";
    $notification->save();
}

public function failed(MessageSending $event, $exception)
{
    $notification = Notification::where('id',$event->data['notification']->id)->first();
    $notification->status = "Sending Event Failed";
    $notification->save();
}

также для LogSentMessage.... См. эту ссылку для получения дополнительной информации https://laravel.com/docs/8.x/mail#events

person fatemeh sadeghi    schedule 16.12.2020