Skip to content

Commit f14bbb3

Browse files
committed
Add transport factories (closes #31385, closes #32523)
1 parent b0ec323 commit f14bbb3

File tree

3 files changed

+77
-4
lines changed

3 files changed

+77
-4
lines changed

DependencyInjection/FrameworkExtension.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@
7777
use Symfony\Component\Lock\Store\FlockStore;
7878
use Symfony\Component\Lock\Store\StoreFactory;
7979
use Symfony\Component\Lock\StoreInterface;
80+
use Symfony\Component\Mailer\Bridge\Amazon\Factory\SesTransportFactory;
81+
use Symfony\Component\Mailer\Bridge\Google\Factory\GmailTransportFactory;
82+
use Symfony\Component\Mailer\Bridge\Mailchimp\Factory\MandrillTransportFactory;
83+
use Symfony\Component\Mailer\Bridge\Mailgun\Factory\MailgunTransportFactory;
84+
use Symfony\Component\Mailer\Bridge\Postmark\Factory\PostmarkTransportFactory;
85+
use Symfony\Component\Mailer\Bridge\Sendgrid\Factory\SendgridTransportFactory;
8086
use Symfony\Component\Mailer\Mailer;
8187
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
8288
use Symfony\Component\Messenger\MessageBus;
@@ -1955,8 +1961,24 @@ private function registerMailerConfiguration(array $config, ContainerBuilder $co
19551961
}
19561962

19571963
$loader->load('mailer.xml');
1964+
$loader->load('mailer_transports.xml');
19581965
$container->getDefinition('mailer.default_transport')->setArgument(0, $config['dsn']);
19591966

1967+
$classToServices = [
1968+
SesTransportFactory::class => 'mailer.transport_factory.amazon',
1969+
GmailTransportFactory::class => 'mailer.transport_factory.gmail',
1970+
MandrillTransportFactory::class => 'mailer.transport_factory.mailchimp',
1971+
MailgunTransportFactory::class => 'mailer.transport_factory.mailgun',
1972+
PostmarkTransportFactory::class => 'mailer.transport_factory.postmark',
1973+
SendgridTransportFactory::class => 'mailer.transport_factory.sendgrid',
1974+
];
1975+
1976+
foreach ($classToServices as $class => $service) {
1977+
if (!class_exists($class)) {
1978+
$container->removeDefinition($service);
1979+
}
1980+
}
1981+
19601982
$recipients = $config['envelope']['recipients'] ?? null;
19611983
$sender = $config['envelope']['sender'] ?? null;
19621984

Resources/config/mailer.xml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@
1212
<service id="mailer" alias="mailer.mailer" />
1313
<service id="Symfony\Component\Mailer\MailerInterface" alias="mailer.mailer" />
1414

15+
<service id="mailer.transport_factory" class="Symfony\Component\Mailer\Transport">
16+
<argument type="tagged_iterator" tag="mailer.transport_factory" />
17+
</service>
18+
1519
<service id="mailer.default_transport" class="Symfony\Component\Mailer\Transport\TransportInterface">
16-
<factory class="Symfony\Component\Mailer\Transport" method="fromDsn" />
20+
<factory service="mailer.transport_factory" method="fromString" />
1721
<argument /> <!-- env(MAILER_DSN) -->
18-
<argument type="service" id="event_dispatcher" />
19-
<argument type="service" id="http_client" on-invalid="ignore" />
20-
<argument type="service" id="logger" on-invalid="ignore" />
2122
</service>
2223
<service id="Symfony\Component\Mailer\Transport\TransportInterface" alias="mailer.default_transport" />
2324

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<services>
8+
<service id="mailer.transport_factory.abstract" class="Symfony\Component\Mailer\Transport\AbstractTransportFactory" abstract="true">
9+
<argument type="service" id="event_dispatcher" />
10+
<argument type="service" id="http_client" on-invalid="ignore" />
11+
<argument type="service" id="logger" on-invalid="ignore" />
12+
</service>
13+
14+
<service id="mailer.transport_factory.amazon" class="Symfony\Component\Mailer\Bridge\Amazon\Factory\SesTransportFactory" parent="mailer.transport_factory.abstract">
15+
<tag name="mailer.transport_factory" />
16+
</service>
17+
18+
<service id="mailer.transport_factory.gmail" class="Symfony\Component\Mailer\Bridge\Google\Factory\GmailTransportFactory" parent="mailer.transport_factory.abstract">
19+
<tag name="mailer.transport_factory" />
20+
</service>
21+
22+
<service id="mailer.transport_factory.mailchimp" class="Symfony\Component\Mailer\Bridge\Mailchimp\Factory\MandrillTransportFactory" parent="mailer.transport_factory.abstract">
23+
<tag name="mailer.transport_factory" />
24+
</service>
25+
26+
<service id="mailer.transport_factory.mailgun" class="Symfony\Component\Mailer\Bridge\Mailgun\Factory\MailgunTransportFactory" parent="mailer.transport_factory.abstract">
27+
<tag name="mailer.transport_factory" />
28+
</service>
29+
30+
<service id="mailer.transport_factory.postmark" class="Symfony\Component\Mailer\Bridge\Postmark\Factory\PostmarkTransportFactory" parent="mailer.transport_factory.abstract">
31+
<tag name="mailer.transport_factory" />
32+
</service>
33+
34+
<service id="mailer.transport_factory.sendgrid" class="Symfony\Component\Mailer\Bridge\Sendgrid\Factory\SendgridTransportFactory" parent="mailer.transport_factory.abstract">
35+
<tag name="mailer.transport_factory" />
36+
</service>
37+
38+
<service id="mailer.transport_factory.null" class="Symfony\Component\Mailer\Transport\NullTransportFactory" parent="mailer.transport_factory.abstract">
39+
<tag name="mailer.transport_factory" />
40+
</service>
41+
42+
<service id="mailer.transport_factory.sendmail" class="Symfony\Component\Mailer\Transport\SendmailTransportFactory" parent="mailer.transport_factory.abstract">
43+
<tag name="mailer.transport_factory" />
44+
</service>
45+
46+
<service id="mailer.transport_factory.smtp" class="Symfony\Component\Mailer\Transport\Smtp\EsmtpTransportFactory" parent="mailer.transport_factory.abstract">
47+
<tag name="mailer.transport_factory" priority="-100" />
48+
</service>
49+
</services>
50+
</container>

0 commit comments

Comments
 (0)