<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Mailer; use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Mailer\Event\MessageEvent; use Symfony\Component\Mailer\Exception\TransportExceptionInterface; use Symfony\Component\Mailer\Messenger\SendEmailMessage; use Symfony\Component\Mailer\Transport\TransportInterface; use Symfony\Component\Messenger\Exception\HandlerFailedException; use Symfony\Component\Messenger\MessageBusInterface; use Symfony\Component\Mime\RawMessage; /** * @author Fabien Potencier <fabien@symfony.com> */ final class Mailer implements MailerInterface { private TransportInterface $transport; private ?MessageBusInterface $bus; private ?EventDispatcherInterface $dispatcher; public function __construct(TransportInterface $transport, MessageBusInterface $bus = null, EventDispatcherInterface $dispatcher = null) { $this->transport = $transport; $this->bus = $bus; $this->dispatcher = $dispatcher; } public function send(RawMessage $message, Envelope $envelope = null): void { if (null === $this->bus) { $this->transport->send($message, $envelope); return; } $stamps = []; if (null !== $this->dispatcher) { // The dispatched event here has `queued` set to `true`; the goal is NOT to render the message, but to let // listeners do something before a message is sent to the queue. // We are using a cloned message as we still want to dispatch the **original** message, not the one modified by listeners. // That's because the listeners will run again when the email is sent via Messenger by the transport (see `AbstractTransport`). // 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 MessageEvent($clonedMessage, $clonedEnvelope, (string) $this->transport, true); $this->dispatcher->dispatch($event); $stamps = $event->getStamps(); } try { $this->bus->dispatch(new SendEmailMessage($message, $envelope), $stamps); } catch (HandlerFailedException $e) { foreach ($e->getNestedExceptions() as $nested) { if ($nested instanceof TransportExceptionInterface) { throw $nested; } } throw $e; } } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Command | Folder | 0755 |
|
|
DataCollector | Folder | 0755 |
|
|
Event | Folder | 0755 |
|
|
EventListener | Folder | 0755 |
|
|
Exception | Folder | 0755 |
|
|
Header | Folder | 0755 |
|
|
Messenger | Folder | 0755 |
|
|
Test | Folder | 0755 |
|
|
Transport | Folder | 0755 |
|
|
CHANGELOG.md | File | 2.82 KB | 0644 |
|
DelayedEnvelope.php | File | 2.4 KB | 0644 |
|
Envelope.php | File | 2.56 KB | 0644 |
|
LICENSE | File | 1.04 KB | 0644 |
|
Mailer.php | File | 2.74 KB | 0644 |
|
MailerInterface.php | File | 763 B | 0644 |
|
README.md | File | 2.08 KB | 0644 |
|
SentMessage.php | File | 2.06 KB | 0644 |
|
Transport.php | File | 6.68 KB | 0644 |
|
composer.json | File | 1.24 KB | 0644 |
|