当前,我正在使用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
,则电子邮件发送成功,并且队列失败,并且重试以再次发送队列,永远不会停止
如果电子邮件地址不可用,如何不将电子邮件排队
答案 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']
,否则返回一个数组,其中包含用于通知您的渠道用户或一个空数组完全跳过该通知。