使用队列时的Laravel Mailer回调

时间:2017-05-31 19:16:08

标签: laravel laravel-5.4 swiftmailer

有没有办法将回调函数传递给Laravel的邮件程序?

我正在使用Mail外观和一个可邮寄的类,它正在发送一个附件。 我希望在发送电子邮件后删除附加的文件表单存储。

电子邮件作业正在排队

Mail::to($user)->send(new MyMailable($file));

我无法使用Mailer解雇事件(https://laravel.com/docs/5.4/mail#events)。一个原因,因为事件发生在电子邮件发送之前,这意味着我将无法在此时删除文件,或者邮件将没有附件。其次,该应用程序有多个电子邮件作业,其中一些必须删除附件,另一些则不会删除。事件数据仅具有swiftmailer实例,没有关于作业本身的额外信息(例如,可邮寄的数据)。

1 个答案:

答案 0 :(得分:1)

Laravel在发送电子邮件时立即触发事件。这并不意味着消息已排队,或者用户已收到消息,而是发送消息。

弹出您的EventServiceProvider并将以下内容添加到$ listen数组中:

'Illuminate\Mail\Events\MessageSending' => [
    'App\Listeners\HandleSentMessage',
],

然后在public function handle()侦听器的HandleSentMessage方法中,接受MessageSending $event作为第一个参数,例如:

public function handle(MessageSending $event) {
    //do whatever with the event data
}