【问题标题】:I am working with Laravel Notification I want to send Email if only Email address is avaiable我正在使用 Laravel 通知如果只有电子邮件地址可用,我想发送电子邮件
【发布时间】:2019-04-05 18:37:53
【问题描述】:

目前,我正在使用 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 并且队列失败并重新尝试再次发送队列永远不会停止

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

【问题讨论】:

  • 首先 if($emailAvailable = 1) 它应该是 if($emailAvailable == 1) 否则它总是 true 。第二,你从哪里得到 $emailAvailable?
  • 我已经更新了StackOverflow的代码,实际逻辑有一些数据不能共享,所以实际情况有点像if($this->user->email == 1) 。我提出的条件是正确的,请放心。我想知道的是,如果电子邮件地址不可用,如何跳过发送邮件。
  • 你确定是$this->user->email == 1 而不是$this->user->email == 'some@email.com'
  • 点击此链接可能会对您有所帮助:stackoverflow.com/questions/47742370/…
  • 检查Queues页面上的“作业失败后清理”部分。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我不同意。我会在“via”方法中检查邮件是否存在。打电话不应该担心这个;来电者只想“通知”用户;通知类负责确定如何以及在哪里发送它;-)
    • @DavidHeremans 实际上,您就在这里。随意写下这个答案,我会通过投票来支持它。
    猜你喜欢
    • 2014-07-20
    • 2014-04-28
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多