gpt4 book ai didi

php - Laravel Mailable 队列,如何将自定义数据传递给 MessageSent 事件

转载 作者:行者123 更新时间:2023-12-04 01:56:59 24 4
gpt4 key购买 nike

我正在使用 Laravel Mailable 发送电子邮件,并且我想记录成功发送的电子邮件。

Laravel Mailable 具有在发送电子邮件后触发的默认事件

https://laravel.com/docs/5.6/mail#events

所以我把我的听众卡在这个事件上

protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
'Illuminate\Mail\Events\MessageSent' => [
'App\Listeners\LogSentEmailNotification',
],
];

监听器处理程序
public function handle(MessageSent $event)
{

//get extra data
$job_request_id = $event->message->job_request_id;

$message = $event->message;

$data = [
'job_request_id' => $job_request_id,
'to' => $message->getHeaders()->get('To'),
'from' => $message->getHeaders()->get('From'),
'cc' => $message->getHeaders()->get('Cc'),
'bcc' => $message->getHeaders()->get('Bcc'),
'subject' => $message->getHeaders()->get('Subject')->getFieldBody(),
'body' => $message->getBody(),
];

$email_notification_log = $this->email_notification_log->create($data);
}

额外的数据 job_request_id 从 Mailable 类 CustomEmailNotification.php 中的 build() 方法传递
class CustomEmailNotification extends Mailable implements ShouldQueue
{

public function build()
{
$job_request_id = 1;

//pass extra data mail message

$this->withSwiftMessage(function ($message) use($job_request_id){
$message->job_request_id = $job_request_id;
});
}
}

现在 Listener 类上的这一行在没有队列的情况下工作正常,但是在使用队列时它将返回 null
 //get extra data 
$job_request_id = $event->message->job_request_id;
var_dump($job_request_id);
//null when using queue

问题是,使用队列时将自定义数据传递给 MailSent 事件的正确方法是什么?

或者在使用队列并传递给 withSwiftMessage() 时,job_request_id 是否有可能丢失,因此事件监听器刚刚收到空值?

谢谢

最佳答案

如果您使用 Supervisor 作为队列 worker 。尝试重新启动所有进程。必须重新加载 Supervisor 以反射(reflect)代码中最近的更改。

sudo supervisorctl restart all

关于php - Laravel Mailable 队列,如何将自定义数据传递给 MessageSent 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49870921/

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