发送电子邮件时未触发 MessageSending 事件

Ala*_*lan 3 php laravel

我需要在发送(或正在发送)电子邮件时执行一些代码。我的应用程序正在运行 Laravel 5.3。我按照此处所述的说明注册了 LogSentMessage 事件侦听器。

到目前为止,这是我的代码:

app/Listeners/LogSentMessage.php:

<?php

namespace App\Listeners;

use Illuminate\Mail\Events\MessageSending;

class LogSentMessage
{
    public function __construct()
    {
        //
    }

    public function handle(MessageSending $event)
    {
        logger('Hello World');
    }
}
Run Code Online (Sandbox Code Playgroud)

app/Listeners/EventServiceProvider.php:

<?php

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        'Illuminate\Mail\Events\MessageSending' => [
            'App\Listeners\LogSentMessage',
        ],
    ];


    public function boot()
    {
        parent::boot();

        //
    }
}
Run Code Online (Sandbox Code Playgroud)

它在两个不同的开发环境中完美工作,侦听器记录“Hello World”,但在我的生产环境中不起作用。可能是什么原因造成的?我正在使用数据库队列驱动程序将电子邮件发送存储为作业,但据此,这不应该成为问题:

Laravel 在发送邮件消息之前触发一个事件。请记住,此事件在发送邮件时触发,而不是在邮件排队时触发。您可以在 EventServiceProvider 中为此事件注册一个事件监听器:

另外,我的生产环境是通过Laravel Forge创建的 Homestead 镜像

via*_*nes 5

队列工作器将应用程序存储在内存中。因此,如果您在第一次启动队列侦听器添加了记录器,请确保运行php artisan queue:restart以刷新作业:

请记住,队列工作进程是长期存在的进程,并将启动的应用程序状态存储在内存中。因此,他们在启动后不会注意到您的代码库中的更改。因此,在部署过程中,请务必重新启动队列工作线程。

来源:运行队列工作线程