diff --git a/src/Symfony/Component/Mailer/Event/MessageEvent.php b/src/Symfony/Component/Mailer/Event/MessageEvent.php index ad0f5574af24b..083b8f8435b56 100644 --- a/src/Symfony/Component/Mailer/Event/MessageEvent.php +++ b/src/Symfony/Component/Mailer/Event/MessageEvent.php @@ -12,6 +12,8 @@ namespace Symfony\Component\Mailer\Event; use Symfony\Component\Mailer\Envelope; +use Symfony\Component\Mailer\Exception\LogicException; +use Symfony\Component\Messenger\Stamp\StampInterface; use Symfony\Component\Mime\RawMessage; use Symfony\Contracts\EventDispatcher\Event; @@ -20,13 +22,16 @@ * * @author Fabien Potencier */ -class MessageEvent extends Event +final class MessageEvent extends Event { private RawMessage $message; private Envelope $envelope; private string $transport; private bool $queued; + /** @var StampInterface[] */ + private array $stamps = []; + public function __construct(RawMessage $message, Envelope $envelope, string $transport, bool $queued = false) { $this->message = $message; @@ -64,4 +69,25 @@ public function isQueued(): bool { return $this->queued; } + + public function addStamp(StampInterface $stamp): void + { + if (!$this->queued) { + throw new LogicException(sprintf('Cannot call "%s()" on a message that is not meant to be queued', __METHOD__)); + } + + $this->stamps[] = $stamp; + } + + /** + * @return StampInterface[] + */ + public function getStamps(): array + { + if (!$this->queued) { + throw new LogicException(sprintf('Cannot call "%s()" on a message that is not meant to be queued.', __METHOD__)); + } + + return $this->stamps; + } } diff --git a/src/Symfony/Component/Mailer/Event/QueuingMessageEvent.php b/src/Symfony/Component/Mailer/Event/QueuingMessageEvent.php deleted file mode 100644 index 250f58e95e137..0000000000000 --- a/src/Symfony/Component/Mailer/Event/QueuingMessageEvent.php +++ /dev/null @@ -1,45 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Mailer\Event; - -use Symfony\Component\Mailer\Envelope; -use Symfony\Component\Messenger\Stamp\StampInterface; -use Symfony\Component\Mime\RawMessage; - -/** - * Allows the transformation of a Message, the Envelope, and the Messenger stamps before the email is sent to the Messenger bus. - * - * @author Fabien Potencier - */ -final class QueuingMessageEvent extends MessageEvent -{ - /** @var StampInterface[] */ - private array $stamps = []; - - public function __construct(RawMessage $message, Envelope $envelope, string $transport) - { - parent::__construct($message, $envelope, $transport, true); - } - - public function addStamp(StampInterface $stamp): void - { - $this->stamps[] = $stamp; - } - - /** - * @return StampInterface[] - */ - public function getStamps(): array - { - return $this->stamps; - } -} diff --git a/src/Symfony/Component/Mailer/EventListener/MessageLoggerListener.php b/src/Symfony/Component/Mailer/EventListener/MessageLoggerListener.php index e12d40317e9de..2446e75cae4f0 100644 --- a/src/Symfony/Component/Mailer/EventListener/MessageLoggerListener.php +++ b/src/Symfony/Component/Mailer/EventListener/MessageLoggerListener.php @@ -14,7 +14,6 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Mailer\Event\MessageEvent; use Symfony\Component\Mailer\Event\MessageEvents; -use Symfony\Component\Mailer\Event\QueuingMessageEvent; use Symfony\Contracts\Service\ResetInterface; /** @@ -50,7 +49,6 @@ public static function getSubscribedEvents(): array { return [ MessageEvent::class => ['onMessage', -255], - QueuingMessageEvent::class => ['onMessage', -255], ]; } } diff --git a/src/Symfony/Component/Mailer/EventListener/MessengerTransportListener.php b/src/Symfony/Component/Mailer/EventListener/MessengerTransportListener.php index 00d5c07e51bb9..8cf8cc800d103 100644 --- a/src/Symfony/Component/Mailer/EventListener/MessengerTransportListener.php +++ b/src/Symfony/Component/Mailer/EventListener/MessengerTransportListener.php @@ -12,7 +12,7 @@ namespace Symfony\Component\Mailer\EventListener; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Mailer\Event\QueuingMessageEvent; +use Symfony\Component\Mailer\Event\MessageEvent; use Symfony\Component\Messenger\Stamp\TransportNamesStamp; use Symfony\Component\Mime\Message; @@ -23,8 +23,12 @@ */ final class MessengerTransportListener implements EventSubscriberInterface { - public function onMessage(QueuingMessageEvent $event): void + public function onMessage(MessageEvent $event): void { + if (!$event->isQueued()) { + return; + } + $message = $event->getMessage(); if (!$message instanceof Message || !$message->getHeaders()->has('X-Bus-Transport')) { return; @@ -39,7 +43,7 @@ public function onMessage(QueuingMessageEvent $event): void public static function getSubscribedEvents(): array { return [ - QueuingMessageEvent::class => 'onMessage', + MessageEvent::class => 'onMessage', ]; } } diff --git a/src/Symfony/Component/Mailer/Mailer.php b/src/Symfony/Component/Mailer/Mailer.php index 70339a44d378f..c9f8b15aa85c1 100644 --- a/src/Symfony/Component/Mailer/Mailer.php +++ b/src/Symfony/Component/Mailer/Mailer.php @@ -13,7 +13,6 @@ use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Mailer\Event\MessageEvent; -use Symfony\Component\Mailer\Event\QueuingMessageEvent; use Symfony\Component\Mailer\Exception\TransportExceptionInterface; use Symfony\Component\Mailer\Messenger\SendEmailMessage; use Symfony\Component\Mailer\Transport\TransportInterface; @@ -54,7 +53,7 @@ public function send(RawMessage $message, Envelope $envelope = null): void // Listeners should act depending on the `$queued` argument of the `MessageEvent` instance. $clonedMessage = clone $message; $clonedEnvelope = null !== $envelope ? clone $envelope : Envelope::create($clonedMessage); - $event = new QueuingMessageEvent($clonedMessage, $clonedEnvelope, (string) $this->transport); + $event = new MessageEvent($clonedMessage, $clonedEnvelope, (string) $this->transport, true); $this->dispatcher->dispatch($event); $stamps = $event->getStamps(); } diff --git a/src/Symfony/Component/Mailer/Tests/EventListener/MessengerTransportListenerTest.php b/src/Symfony/Component/Mailer/Tests/EventListener/MessengerTransportListenerTest.php index 81d387242fa6f..d2627bd030271 100644 --- a/src/Symfony/Component/Mailer/Tests/EventListener/MessengerTransportListenerTest.php +++ b/src/Symfony/Component/Mailer/Tests/EventListener/MessengerTransportListenerTest.php @@ -13,7 +13,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Mailer\Envelope; -use Symfony\Component\Mailer\Event\QueuingMessageEvent; +use Symfony\Component\Mailer\Event\MessageEvent; use Symfony\Component\Mailer\EventListener\MessengerTransportListener; use Symfony\Component\Messenger\Stamp\TransportNamesStamp; use Symfony\Component\Mime\Address; @@ -27,7 +27,7 @@ public function testNoMessengerTransportStampsByDefault() $l = new MessengerTransportListener(); $envelope = new Envelope(new Address('sender@example.com'), [new Address('recipient@example.com')]); $message = new Message(new Headers()); - $event = new QueuingMessageEvent($message, $envelope, 'smtp'); + $event = new MessageEvent($message, $envelope, 'smtp', true); $l->onMessage($event); $this->assertEmpty($event->getStamps()); } @@ -38,7 +38,7 @@ public function testMessengerTransportStampViaHeader() $envelope = new Envelope(new Address('sender@example.com'), [new Address('recipient@example.com')]); $headers = (new Headers())->addTextHeader('X-Bus-Transport', 'async'); $message = new Message($headers); - $event = new QueuingMessageEvent($message, $envelope, 'smtp'); + $event = new MessageEvent($message, $envelope, 'smtp', true); $l->onMessage($event); $this->assertCount(1, $event->getStamps()); /* @var TransportNamesStamp $stamp */ @@ -54,7 +54,7 @@ public function testMessengerTransportStampsViaHeader() $name = 'söme_very_long_and_weïrd transport name-for-messenger!'; $headers = (new Headers())->addTextHeader('X-Bus-Transport', ' async , async1,'.$name); $message = new Message($headers); - $event = new QueuingMessageEvent($message, $envelope, 'smtp'); + $event = new MessageEvent($message, $envelope, 'smtp', true); $l->onMessage($event); $this->assertCount(1, $event->getStamps()); /* @var TransportNamesStamp $stamp */ diff --git a/src/Symfony/Component/Mailer/Tests/MailerTest.php b/src/Symfony/Component/Mailer/Tests/MailerTest.php index 6339f87e31b10..a369216e23cbc 100644 --- a/src/Symfony/Component/Mailer/Tests/MailerTest.php +++ b/src/Symfony/Component/Mailer/Tests/MailerTest.php @@ -13,7 +13,7 @@ use PHPUnit\Framework\TestCase; use Psr\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\Mailer\Event\QueuingMessageEvent; +use Symfony\Component\Mailer\Event\MessageEvent; use Symfony\Component\Mailer\Exception\LogicException; use Symfony\Component\Mailer\Mailer; use Symfony\Component\Mailer\Transport\NullTransport; @@ -54,7 +54,7 @@ public function dispatch($message, array $stamps = []): Envelope $dispatcher = $this->createMock(EventDispatcherInterface::class); $dispatcher->expects($this->once()) ->method('dispatch') - ->with(self::callback(static function (QueuingMessageEvent $event) use ($stamp) { + ->with(self::callback(static function (MessageEvent $event) use ($stamp) { $event->addStamp($stamp); return 'Time for Symfony Mailer!' === $event->getMessage()->getSubject();