diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.xml index becf0d1b71..fa10ebaae3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.xml @@ -8,6 +8,7 @@ + diff --git a/src/Symfony/Component/Mailer/Mailer.php b/src/Symfony/Component/Mailer/Mailer.php index db87602022..8ac505b03d 100644 --- a/src/Symfony/Component/Mailer/Mailer.php +++ b/src/Symfony/Component/Mailer/Mailer.php @@ -17,6 +17,7 @@ use Symfony\Component\Mailer\Messenger\SendEmailMessage; use Symfony\Component\Mailer\Transport\TransportInterface; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Mime\RawMessage; +use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; /** * @author Fabien Potencier @@ -25,8 +26,9 @@ class Mailer implements MailerInterface { private $transport; private $bus; + private $dispatcher; - public function __construct(TransportInterface $transport, MessageBusInterface $bus = null) + public function __construct(TransportInterface $transport, MessageBusInterface $bus = null, EventDispatcherInterface $dispatcher = null) { $this->transport = $transport; $this->bus = $bus; @@ -40,18 +42,20 @@ class Mailer implements MailerInterface return; } - $message = clone $message; - if (null !== $envelope) { - $envelope = clone $envelope; - } else { - try { - $envelope = new DelayedSmtpEnvelope($message); - } catch (\Exception $e) { - throw new TransportException('Cannot send message without a valid envelope.', 0, $e); + if (null !== $this->dispatcher) { + $message = clone $message; + if (null !== $envelope) { + $envelope = clone $envelope; + } else { + try { + $envelope = new DelayedSmtpEnvelope($message); + } catch (\Exception $e) { + throw new TransportException('Cannot send message without a valid envelope.', 0, $e); + } } + $event = new MessageEvent($message, $envelope, $this->transport->getName()); + $this->dispatcher->dispatch($event); } - $event = new MessageEvent($message, $envelope, $this->transport->getName()); - $this->dispatcher->dispatch($event); $this->bus->dispatch(new SendEmailMessage($message, $envelope)); }