Skip to content

Commit a0b89d9

Browse files
committed
feature #30741 Add the Mailer component (fabpot)
This PR was merged into the 4.3-dev branch. Discussion ---------- Add the Mailer component | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no <!-- see https://symfony.com/bc --> | Deprecations? | no <!-- don't forget to update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tests pass? | yes <!-- please add some, will be required by reviewers --> | Fixed tickets | n/a | License | MIT | Doc PR | upcoming https://speakerdeck.com/fabpot/mailer Commits ------- 69b9ee794c added the Mailer component
2 parents dd55b87 + fb6e5ff commit a0b89d9

File tree

5 files changed

+66
-0
lines changed

5 files changed

+66
-0
lines changed

DependencyInjection/Configuration.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use Symfony\Component\HttpFoundation\Cookie;
2727
use Symfony\Component\Lock\Lock;
2828
use Symfony\Component\Lock\Store\SemaphoreStore;
29+
use Symfony\Component\Mailer\Mailer;
2930
use Symfony\Component\Messenger\MessageBusInterface;
3031
use Symfony\Component\PropertyInfo\PropertyInfoExtractorInterface;
3132
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
@@ -112,6 +113,7 @@ public function getConfigTreeBuilder()
112113
$this->addMessengerSection($rootNode);
113114
$this->addRobotsIndexSection($rootNode);
114115
$this->addHttpClientSection($rootNode);
116+
$this->addMailerSection($rootNode);
115117

116118
return $treeBuilder;
117119
}
@@ -1344,4 +1346,19 @@ private function addHttpClientOptionsSection(NodeBuilder $rootNode)
13441346
->end()
13451347
;
13461348
}
1349+
1350+
private function addMailerSection(ArrayNodeDefinition $rootNode)
1351+
{
1352+
$rootNode
1353+
->children()
1354+
->arrayNode('mailer')
1355+
->info('Mailer configuration')
1356+
->{!class_exists(FullStack::class) && class_exists(Mailer::class) ? 'canBeDisabled' : 'canBeEnabled'}()
1357+
->children()
1358+
->scalarNode('dsn')->defaultValue('smtp://null')->end()
1359+
->end()
1360+
->end()
1361+
->end()
1362+
;
1363+
}
13471364
}

DependencyInjection/FrameworkExtension.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
use Symfony\Component\Lock\Store\FlockStore;
7575
use Symfony\Component\Lock\Store\StoreFactory;
7676
use Symfony\Component\Lock\StoreInterface;
77+
use Symfony\Component\Mailer\Mailer;
7778
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
7879
use Symfony\Component\Messenger\MessageBus;
7980
use Symfony\Component\Messenger\MessageBusInterface;
@@ -316,6 +317,10 @@ public function load(array $configs, ContainerBuilder $container)
316317
$this->registerHttpClientConfiguration($config['http_client'], $container, $loader);
317318
}
318319

320+
if ($this->isConfigEnabled($container, $config['mailer'])) {
321+
$this->registerMailerConfiguration($config['mailer'], $container, $loader);
322+
}
323+
319324
if ($this->isConfigEnabled($container, $config['web_link'])) {
320325
if (!class_exists(HttpHeaderSerializer::class)) {
321326
throw new LogicException('WebLink support cannot be enabled as the WebLink component is not installed. Try running "composer require symfony/weblink".');
@@ -1854,6 +1859,16 @@ public function merge(array $options, array $defaultOptions)
18541859
}
18551860
}
18561861

1862+
private function registerMailerConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
1863+
{
1864+
if (!class_exists(Mailer::class)) {
1865+
throw new LogicException('Mailer support cannot be enabled as the component is not installed. Try running "composer require symfony/mailer".');
1866+
}
1867+
1868+
$loader->load('mailer.xml');
1869+
$container->getDefinition('mailer.transport')->setArgument(0, $config['dsn']);
1870+
}
1871+
18571872
/**
18581873
* Returns the base path for the XSD files.
18591874
*

Resources/config/mailer.xml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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" class="Symfony\Component\Mailer\Mailer">
9+
<argument type="service" id="mailer.transport" />
10+
<argument type="service" id="message_bus" on-invalid="ignore" />
11+
</service>
12+
<service id="Symfony\Component\Mailer\MailerInterface" alias="mailer" />
13+
14+
<service id="mailer.transport" class="Symfony\Component\Mailer\Transport\TransportInterface">
15+
<factory class="Symfony\Component\Mailer\Transport" method="fromDsn" />
16+
<argument /> <!-- env(MAILER_DSN) -->
17+
<argument type="service" id="event_dispatcher" />
18+
<argument type="service" id="http_client" on-invalid="ignore" />
19+
<argument type="service" id="logger" on-invalid="ignore" />
20+
</service>
21+
<service id="Symfony\Component\Mailer\Transport\TransportInterface" alias="mailer.transport" />
22+
23+
<service id="mailer.messenger.message_handler" class="Symfony\Component\Mailer\Messenger\MessageHandler">
24+
<argument type="service" id="mailer.transport" />
25+
<tag name="messenger.message_handler" />
26+
</service>
27+
</services>
28+
</container>

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Symfony\Component\Config\Definition\Processor;
2020
use Symfony\Component\HttpClient\HttpClient;
2121
use Symfony\Component\Lock\Store\SemaphoreStore;
22+
use Symfony\Component\Mailer\Mailer;
2223
use Symfony\Component\Messenger\MessageBusInterface;
2324

2425
class ConfigurationTest extends TestCase
@@ -336,6 +337,10 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
336337
'enabled' => !class_exists(FullStack::class) && class_exists(HttpClient::class),
337338
'clients' => [],
338339
],
340+
'mailer' => [
341+
'dsn' => 'smtp://null',
342+
'enabled' => !class_exists(FullStack::class) && class_exists(Mailer::class),
343+
],
339344
];
340345
}
341346
}

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"symfony/form": "^4.3",
4343
"symfony/expression-language": "~3.4|~4.0",
4444
"symfony/http-client": "^4.3",
45+
"symfony/mailer": "^4.3",
4546
"symfony/messenger": "^4.3",
4647
"symfony/mime": "^4.3",
4748
"symfony/process": "~3.4|~4.0",

0 commit comments

Comments
 (0)