Я работаю с Laravel Notification. Я хочу отправить Email, если доступен только адрес электронной почты. - PullRequest
0 голосов
/ 05 апреля 2019

В настоящее время я работаю с Laravel 5.7 Project

Теперь я отправляю Уведомление Laravel (электронная почта, SMS и OneSignal Push)

Электронная почта пользователя не обязательна (войдите с мобильного телефона). Теперь я хочу отправлять электронную почту, если и только если адрес электронной почты предоставлен пользователем, в противном случае я отправляю SMS и Push-уведомление будет отправлено всегда (как с электронной почтой, так и с SMS)

В уведомлении я проверяю

    public function toMail($notifiable)
    {
        if($this->user->email != null){
           return $(new MailMessage())->subject(__('Received Test Email  :app_name', ['app_name' => app_name()]))->view('mail.testView');
        }
        return false;
    }

Электронная почта отправляется успешно, если есть адрес электронной почты, но если адрес электронной почты отсутствует, return false выполняется, и очередь не удается, и он пытается отправить снова, очередь никогда не останавливается

Как не ставить электронную почту в очередь, если адрес электронной почты недоступен

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Вы также можете реализовать эту проверку в методе via вашего класса уведомлений и возвращать ['mail'] только в том случае, если уведомляемая сущность имеет адрес электронной почты, в противном случае возвращает массив с каналами, по которым вы будете уведомлять своего пользователя, или пустоймассив для пропуска уведомления вообще.

0 голосов
/ 05 апреля 2019

Отделите этот тесно связанный код. В месте, где вы звоните notify() или Notification::send(), проверьте наличие электронной почты. Там вы должны поместить if заявление и проверить наличие электронной почты. Не в этом методе отправки. Звоните только после того, как узнаете, что электронная почта существует. И toMail() метод должен выглядеть как

public function toMail($notifiable)
{
    return (new MailMessage())->subject(__('Received Test Email  :app_name', ['app_name' => app_name()]))->view('mail.testView');
}

Ничего больше. toMail() метод не должен заботиться о проверке существования электронной почты. Это имя и функция должна быть просто отправлять электронную почту.

...