Skip to content

Commit 356436f

Browse files
committed
[Mailer] Add support for multiple mailers
1 parent 9ea05b1 commit 356436f

35 files changed

+270
-70
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1555,8 +1555,26 @@ 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+
->beforeNormalization()
1563+
->always(function ($v) {
1564+
if (!isset($v['transports']) && !isset($v['dsn'])) {
1565+
$v['dsn'] = 'smtp://null';
1566+
}
1567+
1568+
return $v;
1569+
})
1570+
->end()
1571+
->fixXmlConfig('transport')
15581572
->children()
1559-
->scalarNode('dsn')->defaultValue('smtp://null')->end()
1573+
->scalarNode('dsn')->defaultNull()->end()
1574+
->arrayNode('transports')
1575+
->useAttributeAsKey('name')
1576+
->prototype('scalar')->end()
1577+
->end()
15601578
->arrayNode('envelope')
15611579
->info('Mailer Envelope configuration')
15621580
->children()

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,10 @@ public function load(array $configs, ContainerBuilder $container)
316316
$this->registerHttpClientConfiguration($config['http_client'], $container, $loader, $config['profiler']);
317317
}
318318

319+
if ($this->mailerConfigEnabled = $this->isConfigEnabled($container, $config['mailer'])) {
320+
$this->registerMailerConfiguration($config['mailer'], $container, $loader);
321+
}
322+
319323
$propertyInfoEnabled = $this->isConfigEnabled($container, $config['property_info']);
320324
$this->registerValidationConfiguration($config['validation'], $container, $loader, $propertyInfoEnabled);
321325
$this->registerEsiConfiguration($config['esi'], $container, $loader);
@@ -346,10 +350,6 @@ public function load(array $configs, ContainerBuilder $container)
346350
$this->registerLockConfiguration($config['lock'], $container, $loader);
347351
}
348352

349-
if ($this->mailerConfigEnabled = $this->isConfigEnabled($container, $config['mailer'])) {
350-
$this->registerMailerConfiguration($config['mailer'], $container, $loader);
351-
}
352-
353353
if ($this->isConfigEnabled($container, $config['web_link'])) {
354354
if (!class_exists(HttpHeaderSerializer::class)) {
355355
throw new LogicException('WebLink support cannot be enabled as the WebLink component is not installed. Try running "composer require symfony/weblink".');
@@ -1977,7 +1977,9 @@ 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+
$transports = isset($config['dsn']) ? ['main' => $config['dsn']] : $config['transports'];
1981+
$container->getDefinition('mailer.transports')->setArgument(0, $transports);
1982+
$container->getDefinition('mailer.default_transport')->setArgument(0, array_values($transports)[0]);
19811983

19821984
$classToServices = [
19831985
SesTransportFactory::class => 'mailer.transport_factory.amazon',

src/Symfony/Bundle/FrameworkBundle/Resources/config/mailer.xml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,19 @@
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" /> <!-- transport DSNs -->
19+
<argument type="tagged_iterator" tag="mailer.transport" />
20+
</service>
21+
1622
<service id="mailer.transport_factory" class="Symfony\Component\Mailer\Transport">
1723
<argument type="tagged_iterator" tag="mailer.transport_factory" />
1824
</service>
@@ -24,7 +30,7 @@
2430
<service id="Symfony\Component\Mailer\Transport\TransportInterface" alias="mailer.default_transport" />
2531

2632
<service id="mailer.messenger.message_handler" class="Symfony\Component\Mailer\Messenger\MessageHandler">
27-
<argument type="service" id="mailer.default_transport" />
33+
<argument type="service" id="mailer.transport" />
2834
<tag name="messenger.message_handler" />
2935
</service>
3036

src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function __construct(string $accessKey, string $secretKey, string $region
4343
parent::__construct($client, $dispatcher, $logger);
4444
}
4545

46-
public function getName(): string
46+
public function __toString(): string
4747
{
4848
return sprintf('api://%s@ses?region=%s', $this->accessKey, $this->region);
4949
}

src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function __construct(string $accessKey, string $secretKey, string $region
4242
parent::__construct($client, $dispatcher, $logger);
4343
}
4444

45-
public function getName(): string
45+
public function __toString(): string
4646
{
4747
return sprintf('http://%s@ses?region=%s', $this->accessKey, $this->region);
4848
}

src/Symfony/Component/Mailer/Bridge/Mailchimp/Transport/MandrillApiTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function __construct(string $key, HttpClientInterface $client = null, Eve
3636
parent::__construct($client, $dispatcher, $logger);
3737
}
3838

39-
public function getName(): string
39+
public function __toString(): string
4040
{
4141
return sprintf('api://mandrill');
4242
}

src/Symfony/Component/Mailer/Bridge/Mailchimp/Transport/MandrillHttpTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public function __construct(string $key, HttpClientInterface $client = null, Eve
3434
parent::__construct($client, $dispatcher, $logger);
3535
}
3636

37-
public function getName(): string
37+
public function __toString(): string
3838
{
3939
return sprintf('http://mandrill');
4040
}

src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public function __construct(string $key, string $domain, string $region = null,
4141
parent::__construct($client, $dispatcher, $logger);
4242
}
4343

44-
public function getName(): string
44+
public function __toString(): string
4545
{
4646
return sprintf('api://%s@mailgun?region=%s', $this->domain, $this->region);
4747
}

src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunHttpTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function __construct(string $key, string $domain, string $region = null,
4040
parent::__construct($client, $dispatcher, $logger);
4141
}
4242

43-
public function getName(): string
43+
public function __toString(): string
4444
{
4545
return sprintf('http://%s@mailgun?region=%s', $this->domain, $this->region);
4646
}

src/Symfony/Component/Mailer/Bridge/Postmark/Transport/PostmarkApiTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function __construct(string $key, HttpClientInterface $client = null, Eve
3636
parent::__construct($client, $dispatcher, $logger);
3737
}
3838

39-
public function getName(): string
39+
public function __toString(): string
4040
{
4141
return sprintf('api://postmark');
4242
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy