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

时间:2019-04-05 07:36:37

标签: php laravel laravel-5 notifications laravel-queue

当前,我正在使用Laravel 5.7 Project

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

用户电子邮件是可选的(使用手机登录)。 现在,我仅当用户以其他方式提供电子邮件地址时才发送电子邮件,否则我将发送短信,并且将始终发送推送通知(同时包含电子邮件和短信)

在通知中我检查

    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 个答案:

答案 0 :(得分: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()方法不应该检查电子邮件是否存在。 它是名称,也应该只是发送电子邮件而已。

答案 1 :(得分:0)

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