Skip to content

Commit f2c0277

Browse files
committed
[Mailer] Add support for multiple mailers
1 parent c63c3f9 commit f2c0277

File tree

5 files changed

+26
-6
lines changed

5 files changed

+26
-6
lines changed

DependencyInjection/Configuration.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1555,8 +1555,17 @@ private function addMailerSection(ArrayNodeDefinition $rootNode)
15551555
->arrayNode('mailer')
15561556
->info('Mailer configuration')
15571557
->{!class_exists(FullStack::class) && class_exists(Mailer::class) ? 'canBeDisabled' : 'canBeEnabled'}()
1558+
->validate()
1559+
->ifTrue(function ($v) { return isset($v['dsn']) && \count($v['transports']); })
1560+
->thenInvalid('"dsn" and "transports" cannot be used together.')
1561+
->end()
1562+
->fixXmlConfig('transport')
15581563
->children()
1559-
->scalarNode('dsn')->defaultValue('smtp://null')->end()
1564+
->scalarNode('dsn')->defaultNull()->end()
1565+
->arrayNode('transports')
1566+
->useAttributeAsKey('name')
1567+
->prototype('scalar')->end()
1568+
->end()
15601569
->arrayNode('envelope')
15611570
->info('Mailer Envelope configuration')
15621571
->children()

DependencyInjection/FrameworkExtension.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1977,7 +1977,12 @@ private function registerMailerConfiguration(array $config, ContainerBuilder $co
19771977

19781978
$loader->load('mailer.xml');
19791979
$loader->load('mailer_transports.xml');
1980-
$container->getDefinition('mailer.default_transport')->setArgument(0, $config['dsn']);
1980+
if (!\count($config['transports']) && null === $config['dsn']) {
1981+
$config['dsn'] = 'smtp://null';
1982+
}
1983+
$transports = $config['dsn'] ? ['main' => $config['dsn']] : $config['transports'];
1984+
$container->getDefinition('mailer.transports')->setArgument(0, $transports);
1985+
$container->getDefinition('mailer.default_transport')->setArgument(0, current($transports));
19811986

19821987
$classToServices = [
19831988
SesTransportFactory::class => 'mailer.transport_factory.amazon',

Resources/config/mailer.xml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@
66

77
<services>
88
<service id="mailer.mailer" class="Symfony\Component\Mailer\Mailer">
9-
<argument type="service" id="mailer.default_transport" />
9+
<argument type="service" id="mailer.transports" />
1010
<argument type="service" id="messenger.default_bus" on-invalid="ignore" />
1111
<argument type="service" id="event_dispatcher" on-invalid="ignore" />
1212
</service>
1313
<service id="mailer" alias="mailer.mailer" />
1414
<service id="Symfony\Component\Mailer\MailerInterface" alias="mailer.mailer" />
1515

16+
<service id="mailer.transports" class="Symfony\Component\Mailer\Transports">
17+
<factory service="mailer.transport_factory" method="fromStrings" />
18+
<argument type="collection" /> <!-- transports -->
19+
</service>
20+
1621
<service id="mailer.transport_factory" class="Symfony\Component\Mailer\Transport">
1722
<argument type="tagged_iterator" tag="mailer.transport_factory" />
1823
</service>
@@ -24,7 +29,7 @@
2429
<service id="Symfony\Component\Mailer\Transport\TransportInterface" alias="mailer.default_transport" />
2530

2631
<service id="mailer.messenger.message_handler" class="Symfony\Component\Mailer\Messenger\MessageHandler">
27-
<argument type="service" id="mailer.default_transport" />
32+
<argument type="service" id="mailer.transports" />
2833
<tag name="messenger.message_handler" />
2934
</service>
3035

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,8 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
369369
'scoped_clients' => [],
370370
],
371371
'mailer' => [
372-
'dsn' => 'smtp://null',
372+
'dsn' => null,
373+
'transports' => [],
373374
'enabled' => !class_exists(FullStack::class) && class_exists(Mailer::class),
374375
],
375376
];

Tests/Functional/MailerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ protected function doSend(SentMessage $message): void
5555
}
5656
};
5757

58-
$mailer = new Mailer($testTransport, null);
58+
$mailer = new Mailer($testTransport);
5959

6060
$message = (new Email())
6161
->subject('Test subject')

0 commit comments

Comments
 (0)