I'm trying to use the MessageSent event in Laravel 11. I created a simple EventListener like this:
<?php
namespace App\Listeners;
use App\Events\MessageSent;
use Illuminate\Support\Facades\Log;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class LogEmails {
/**
* Create the event listener.
*/
public function __construct() {
//
}
/**
* Handle the event.
*/
public function handle(MessageSent $event): void {
Log::info("Message sent!");
}
}
The Mailable is sending emails and doesn't have any issue, yet MessageSent never seems to get triggered even if it appears when I do php artisan event:list.
What is the App\Events\MessageSent class? Since it is in the App namespace, it appears to be something you have implemented; so how does the framework dispatch it?
We have a Illuminate\Mail\Events\MessageSent class that the framework's Mailer class will dispatch whenever it sends a mail; perhaps your Listener should be using that instead?
<?php
namespace App\Listeners;
use Illuminate\Mail\Events\MessageSent; // import correct Event class!
use Illuminate\Support\Facades\Log;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class LogEmails {
/**
* Create the event listener.
*/
public function __construct() {
//
}
/**
* Handle the event.
*/
public function handle(MessageSent $event): void {
Log::info("Message sent!");
}
}