我正在使用Laravel通知我想发送电子邮件,如果只有电子邮件地址可用

问题描述 投票:0回答:2

目前,我正在使用Laravel 5.7项目

现在我发送Laravel Notification(电子邮件,短信和OneSignal推送)

用户电子邮件是可选的(使用移动设备登录)现在我想发送电子邮件当且仅当用户提供电子邮件地址时,我发送短信和推送通知将始终发送(包括电子邮件和短信)

在通知我检查

    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并且队列失败,并且重试再次发送队列永远不会停止

如果电子邮件地址不可用,我如何不对电子邮件进行排队

php laravel laravel-5 notifications laravel-queue
2个回答
1
投票

您还可以在通知类的via方法中实现该检查,并仅在通知实体具有电子邮件地址时返回['mail'],否则返回包含通知您的用户的通道的数组或返回空数组以跳过通知的数组。


0
投票

解耦紧密耦合的代码。在您调用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()方法不应该检查电子邮件的存在。它的名称,也应该是功能只是发送电子邮件。

© www.soinside.com 2019 - 2024. All rights reserved.