Skip to content

Commit e929ee8

Browse files
committed
[Mailer] Add support for multiple mailers
1 parent bcb91ea commit e929ee8

35 files changed

+180
-64
lines changed

src/Symfony/Bundle/FrameworkBundle/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()

src/Symfony/Bundle/FrameworkBundle/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',

src/Symfony/Bundle/FrameworkBundle/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

src/Symfony/Bundle/FrameworkBundle/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
];

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/MailerTest.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Symfony\Component\Mailer\Mailer;
99
use Symfony\Component\Mailer\SentMessage;
1010
use Symfony\Component\Mailer\Transport\AbstractTransport;
11+
use Symfony\Component\Mailer\Transports;
1112
use Symfony\Component\Mime\Address;
1213
use Symfony\Component\Mime\Email;
1314

@@ -43,7 +44,7 @@ public function __construct(EventDispatcherInterface $eventDispatcher, LoggerInt
4344
$this->onDoSend = $onDoSend;
4445
}
4546

46-
public function getName(): string
47+
public function __toString(): string
4748
{
4849
return 'dummy://local';
4950
}
@@ -55,7 +56,7 @@ protected function doSend(SentMessage $message): void
5556
}
5657
};
5758

58-
$mailer = new Mailer($testTransport, null);
59+
$mailer = new Mailer(new Transports(['main' => $testTransport]));
5960

6061
$message = (new Email())
6162
->subject('Test subject')

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
}

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