79090885

Date: 2024-10-15 16:32:26
Score: 0.5
Natty:
Report link

I have found a kludgey answer: get the transport from the MessageEvent that is dispatched immediately before the SentMessageEvent.

class EmailMessageSubscriber implements EventSubscriberInterface
{

    private array $messageTransport = []; 

    public static function getSubscribedEvents(): array
    {
        return [
            SentMessageEvent::class => 'onSentMessageEvent',
            MessageEvent::class => ['onMessageEvent', -256],
        ];
    }

    public function onMessageEvent(MessageEvent $event): void
    {
        if ($event->isQueued()) {
            return;
        }
        $message = $event->getMessage();
        $this->messageTransport[spl_object_id($message)] = $event->getTransport();
    }

    public function onSentMessageEvent(SentMessageEvent $event): void
    {
        $sentMessage = $event->getMessage();
        $transport = $this->messageTransport[spl_object_id($sentMessage->getOriginalMessage())] ?? null;
        ...
    }
}
Reasons:
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: OVG