我正在使用 Laravel Mailable 发送电子邮件,并希望记录成功发送的电子邮件。
Laravel Mailable 具有默认事件,在电子邮件发送后触发。
“extra data job_request_id 是从 Mailable 类的 build() 方法中传递的,位于 CustomEmailNotification.php 文件中。”
问题是,使用队列时向MailSent事件传递自定义数据的正确方法是什么?
或者,在使用队列并传递给withSwiftMessage()时,job_request_id是否会丢失,因此事件侦听器只会收到null值?
谢谢
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);
}
“extra data job_request_id 是从 Mailable 类的 build() 方法中传递的,位于 CustomEmailNotification.php 文件中。”
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是否会丢失,因此事件侦听器只会收到null值?
谢谢