gpt4 book ai didi

Laravel 通知 - 延迟电子邮件发送并在条件满足时取消

转载 作者:行者123 更新时间:2023-12-03 23:15:09 31 4
gpt4 key购买 nike

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

我要解决的方法是使用 Laravel Notifications 创建邮件、广播和数据库通知。在 toMail()方法我延迟返回一个可邮寄的 -

public function toMail($notifiable)
{
return (new \App\Mail\Order\NewOrder($this->order))
->delay(now()->addMinutes(10));
}

分钟后,电子邮件将发送 但是 ,在发送之前,我想检查一下推送/数据库通知是否已被标记为已读,以及它是否已取消电子邮件发送。我能想到的唯一方法是绑定(bind)到 MessageSending烘焙到 Laravel 中的事件 -
// listen for emails being sent
'Illuminate\Mail\Events\MessageSending' => [
'App\Listeners\Notification\SendingEmail'
],

唯一的问题是这个监听器接收到一个 Swift 邮件事件,而不是我发送的原始邮件,所以我不知道如何取消它。任何想法和提前感谢?

最佳答案

类扩展通知

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

public function dontSend($notifiable)
{
return $this->appointment->status === 'cancelled';
}

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

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

更多详情请看文章 Handling delayed notifications in Laravel

关于Laravel 通知 - 延迟电子邮件发送并在条件满足时取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52483708/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com