diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 66abdff023c75..f32b19b9fe86c 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -356,7 +356,7 @@ public function load(array $configs, ContainerBuilder $container)
}
if ($this->mailerConfigEnabled = $this->isConfigEnabled($container, $config['mailer'])) {
- $this->registerMailerConfiguration($config['mailer'], $container, $loader);
+ $this->registerMailerConfiguration($config['mailer'], $container, $phpLoader);
}
if ($this->isConfigEnabled($container, $config['notifier'])) {
@@ -369,7 +369,7 @@ public function load(array $configs, ContainerBuilder $container)
$this->registerSsiConfiguration($config['ssi'], $container, $loader);
$this->registerFragmentsConfiguration($config['fragments'], $container, $loader);
$this->registerTranslatorConfiguration($config['translator'], $container, $loader, $config['default_locale']);
- $this->registerProfilerConfiguration($config['profiler'], $container, $loader);
+ $this->registerProfilerConfiguration($config['profiler'], $container, $loader, $phpLoader);
$this->registerWorkflowConfiguration($config['workflows'], $container, $loader);
$this->registerDebugConfiguration($config['php_errors'], $container, $loader);
$this->registerRouterConfiguration($config['router'], $container, $loader, $config['translator']['enabled_locales'] ?? []);
@@ -568,7 +568,7 @@ private function registerFragmentsConfiguration(array $config, ContainerBuilder
$container->setParameter('fragment.path', $config['path']);
}
- private function registerProfilerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
+ private function registerProfilerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader, PhpFileLoader $phpLoader)
{
if (!$this->isConfigEnabled($container, $config)) {
// this is needed for the WebProfiler to work even if the profiler is disabled
@@ -600,7 +600,7 @@ private function registerProfilerConfiguration(array $config, ContainerBuilder $
}
if ($this->mailerConfigEnabled) {
- $loader->load('mailer_debug.xml');
+ $phpLoader->load('mailer_debug.php');
}
if ($this->httpClientConfigEnabled) {
@@ -1953,14 +1953,14 @@ private function registerHttpClientConfiguration(array $config, ContainerBuilder
}
}
- private function registerMailerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
+ private function registerMailerConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader)
{
if (!class_exists(Mailer::class)) {
throw new LogicException('Mailer support cannot be enabled as the component is not installed. Try running "composer require symfony/mailer".');
}
- $loader->load('mailer.xml');
- $loader->load('mailer_transports.xml');
+ $loader->load('mailer.php');
+ $loader->load('mailer_transports.php');
if (!\count($config['transports']) && null === $config['dsn']) {
$config['dsn'] = 'smtp://null';
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.php
new file mode 100644
index 0000000000000..c23e9f6ddfbc6
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.php
@@ -0,0 +1,75 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+
+use Symfony\Component\Mailer\EventListener\EnvelopeListener;
+use Symfony\Component\Mailer\EventListener\MessageListener;
+use Symfony\Component\Mailer\EventListener\MessageLoggerListener;
+use Symfony\Component\Mailer\Mailer;
+use Symfony\Component\Mailer\MailerInterface;
+use Symfony\Component\Mailer\Messenger\MessageHandler;
+use Symfony\Component\Mailer\Transport;
+use Symfony\Component\Mailer\Transport\TransportInterface;
+use Symfony\Component\Mailer\Transport\Transports;
+
+return static function (ContainerConfigurator $container) {
+ $container->services()
+ ->set('mailer.mailer', Mailer::class)
+ ->args([
+ service('mailer.transports'),
+ abstract_arg('message bus'),
+ service('event_dispatcher')->ignoreOnInvalid(),
+ ])
+ ->alias('mailer', 'mailer.mailer')
+ ->alias(MailerInterface::class, 'mailer.mailer')
+
+ ->set('mailer.transports', Transports::class)
+ ->factory([service('mailer.transport_factory'), 'fromStrings'])
+ ->args([
+ abstract_arg('transports'),
+ ])
+
+ ->set('mailer.transport_factory', Transport::class)
+ ->args([
+ tagged_iterator('mailer.transport_factory'),
+ ])
+
+ ->set('mailer.default_transport', TransportInterface::class)
+ ->factory([service('mailer.transport_factory'), 'fromString'])
+ ->args([
+ abstract_arg('env(MAILER_DSN)'),
+ ])
+ ->alias(TransportInterface::class, 'mailer.default_transport')
+
+ ->set('mailer.messenger.message_handler', MessageHandler::class)
+ ->args([
+ service('mailer.transports'),
+ ])
+ ->tag('messenger.message_handler')
+
+ ->set('mailer.envelope_listener', EnvelopeListener::class)
+ ->args([
+ abstract_arg('sender'),
+ abstract_arg('recipients'),
+ ])
+ ->tag('kernel.event_subscriber')
+
+ ->set('mailer.message_listener', MessageListener::class)
+ ->args([
+ abstract_arg('headers'),
+ ])
+ ->tag('kernel.event_subscriber')
+
+ ->set('mailer.logger_message_listener', MessageLoggerListener::class)
+ ->tag('kernel.event_subscriber')
+ ;
+};
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.xml
deleted file mode 100644
index c267bc675bbc9..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_debug.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_debug.php
new file mode 100644
index 0000000000000..f6398c6e17994
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_debug.php
@@ -0,0 +1,27 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+
+use Symfony\Component\Mailer\DataCollector\MessageDataCollector;
+
+return static function (ContainerConfigurator $container) {
+ $container->services()
+ ->set('mailer.data_collector', MessageDataCollector::class)
+ ->args([
+ service('mailer.logger_message_listener'),
+ ])
+ ->tag('data_collector', [
+ 'template' => '@WebProfiler/Collector/mailer.html.twig',
+ 'id' => 'mailer',
+ ])
+ ;
+};
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_debug.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_debug.xml
deleted file mode 100644
index 17e1a6ed54ad9..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_debug.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_transports.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_transports.php
new file mode 100644
index 0000000000000..787cdf93cae50
--- /dev/null
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_transports.php
@@ -0,0 +1,71 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\DependencyInjection\Loader\Configurator;
+
+use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesTransportFactory;
+use Symfony\Component\Mailer\Bridge\Google\Transport\GmailTransportFactory;
+use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillTransportFactory;
+use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory;
+use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkTransportFactory;
+use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridTransportFactory;
+use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
+use Symfony\Component\Mailer\Transport\NullTransportFactory;
+use Symfony\Component\Mailer\Transport\SendmailTransportFactory;
+use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransportFactory;
+
+return static function (ContainerConfigurator $container) {
+ $container->services()
+ ->set('mailer.transport_factory.abstract', AbstractTransportFactory::class)
+ ->abstract()
+ ->args([
+ service('event_dispatcher'),
+ service('http_client')->ignoreOnInvalid(),
+ service('logger')->ignoreOnInvalid(),
+ ])
+
+ ->set('mailer.transport_factory.amazon', SesTransportFactory::class)
+ ->parent('mailer.transport_factory.abstract')
+ ->tag('mailer.transport_factory')
+
+ ->set('mailer.transport_factory.gmail', GmailTransportFactory::class)
+ ->parent('mailer.transport_factory.abstract')
+ ->tag('mailer.transport_factory')
+
+ ->set('mailer.transport_factory.mailchimp', MandrillTransportFactory::class)
+ ->parent('mailer.transport_factory.abstract')
+ ->tag('mailer.transport_factory')
+
+ ->set('mailer.transport_factory.mailgun', MailgunTransportFactory::class)
+ ->parent('mailer.transport_factory.abstract')
+ ->tag('mailer.transport_factory')
+
+ ->set('mailer.transport_factory.postmark', PostmarkTransportFactory::class)
+ ->parent('mailer.transport_factory.abstract')
+ ->tag('mailer.transport_factory')
+
+ ->set('mailer.transport_factory.sendgrid', SendgridTransportFactory::class)
+ ->parent('mailer.transport_factory.abstract')
+ ->tag('mailer.transport_factory')
+
+ ->set('mailer.transport_factory.null', NullTransportFactory::class)
+ ->parent('mailer.transport_factory.abstract')
+ ->tag('mailer.transport_factory')
+
+ ->set('mailer.transport_factory.sendmail', SendmailTransportFactory::class)
+ ->parent('mailer.transport_factory.abstract')
+ ->tag('mailer.transport_factory')
+
+ ->set('mailer.transport_factory.smtp', EsmtpTransportFactory::class)
+ ->parent('mailer.transport_factory.abstract')
+ ->tag('mailer.transport_factory', ['priority' => -100])
+ ;
+};
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_transports.xml
deleted file mode 100644
index d478942a0c3f0..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer_transports.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-