Laravel通知 - 延迟电子邮件发送,如果满足条件,则取消



>我有一个应用程序,我正在发送推送通知,如果用户登录到应用程序,这很好 - 但是,如果他们没有/如果他们没有在 X 分钟内阅读通知,我想向他们发送电子邮件。

我这样做的方法是使用Laravel通知来创建邮件,广播和数据库通知。在toMail()方法上,我延迟返回可邮寄邮件 -

public function toMail($notifiable)
{
return (new AppMailOrderNewOrder($this->order))
->delay(now()->addMinutes(10));
}

分钟结束后,电子邮件将发送,但在发送继续进行之前,我想执行检查以查看推送/数据库通知是否已标记为已读以及是否已取消电子邮件发送。我能想到的唯一方法是绑定到Laravel中烘焙MessageSending事件 -

// listen for emails being sent
'IlluminateMailEventsMessageSending' => [
'AppListenersNotificationSendingEmail'
],

唯一的问题是这个侦听器收到一个 Swift 邮件事件,而不是我正在调度的原始可邮寄对象,所以我不知道如何取消它。有什么想法和提前感谢吗?

类扩展通知

public function via($notifiable)
{
if($this->dontSend($notifiable)) {
return [];
}
return ['mail'];
}
public function dontSend($notifiable)
{
return $this->appointment->status === 'cancelled';
}

类事件服务提供程序

protected $listen = [
NotificationSending::class => [
NotificationSendingListener::class,
],
];

类通知发送侦听器

public function handle(NotificationSending $event)
{
if (method_exists($event->notification, 'dontSend')) {
return !$event->notification->dontSend($event->notifiable);
}
return true;
}

有关更多详细信息,请参阅文章在Laravel中处理延迟通知

最新更新