8000 [Mailer] Overwrite envelope sender and recipients from config · symfony/symfony@f589840 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f589840

Browse files
committed
[Mailer] Overwrite envelope sender and recipients from config
1 parent 411ad97 commit f589840

File tree

6 files changed

+118
-0
lines changed

6 files changed

+118
-0
lines changed

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1525,6 +1525,22 @@ private function addMailerSection(ArrayNodeDefinition $rootNode)
15251525
->{!class_exists(FullStack::class) && class_exists(Mailer::class) ? 'canBeDisabled' : 'canBeEnabled'}()
15261526
->children()
15271527
->scalarNode('dsn')->defaultValue('smtp://null')->end()
1528+
->arrayNode('envelope')
1529+
->info('Mailer Envelope configuration')
1530+
->children()
1531+
->scalarNode('sender')->end()
1532+
->arrayNode('recipients')
1533+
->performNoDeepMerging()
1534+
->beforeNormalization()
1535+
->ifArray()
1536+
->then(function ($v) {
1537+
return array_filter(array_values($v));
1538+
})
1539+
->end()
1540+
->prototype('scalar')->end()
1541+
->end()
1542+
->end()
1543+
->end()
15281544
->end()
15291545
->end()
15301546
->end()

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1918,6 +1918,13 @@ private function registerMailerConfiguration(array $config, ContainerBuilder $co
19181918

19191919
$loader->load('mailer.xml');
19201920
$container->getDefinition('mailer.default_transport')->setArgument(0, $config['dsn']);
1921+
1922+
$recipients = $config['envelope']['recipients'] ?? null;
1923+
$sender = $config['envelope']['sender'] ?? null;
1924+
1925+
$envelopeListener = $container->getDefinition('mailer.envelope_listener');
1926+
$envelopeListener->setArgument(0, $sender);
1927+
$envelopeListener->setArgument(1, $recipients);
19211928
}
19221929

19231930
/**

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,11 @@
2525
<argument type="service" id="mailer.default_transport" />
2626
<tag name="messenger.message_handler" />
2727
</service>
28+
29+
<service id="mailer.envelope_listener" class="Symfony\Component\Mailer\EventListener\EnvelopeListener">
30+
<argument>null</argument>
31+
<argument>null</argument>
32+
<tag name="kernel.event_subscriber"/>
33+
</service>
2834
</services>
2935
</container>
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace Symfony\Bundle\FrameworkBundle\Tests\Functional;
4+
5+
use Psr\Log\LoggerInterface;
6+
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
7+
use Symfony\Component\Mailer\Mailer;
8+
use Symfony\Component\Mailer\SentMessage;
9+
use Symfony\Component\Mailer\Transport\AbstractTransport;
10+
use Symfony\Component\Mime\Address;
11+
use Symfony\Component\Mime\Email;
12+
13+
class MailerTest extends WebTestCase
14+
{
15+
public function testMailer()
16+
{
17+
self::bootKernel(['test_case' => 'Mailer']);
18+
19+
$onDoSend = function (SentMessage $message) {
20+
$envelope = $message->getEnvelope();
21+
22+
$this->assertEquals(
23+
[new Address('redirected@example.org')],
24+
$envelope->getRecipients()
25+
);
26+
27+
$this->assertEquals('sender@example.org', $envelope->getSender()->getAddress());
28+
};
29+
30+
$eventDispatcher = self::$container->get(EventDispatcherInterface::class);
31+
$logger = self::$container->get('logger');
32+
33+
$testTransport = new class($eventDispatcher, $logger, $onDoSend) extends AbstractTransport {
34+
/**
35+
* @var callable
36+
*/
37+
private $onDoSend;
38+
39+
public function __construct(EventDispatcherInterface $eventDispatcher, LoggerInterface $logger, callable $onDoSend)
40+
{
41+
parent::__construct($eventDispatcher, $logger);
42+
$this->onDoSend = $onDoSend;
43+
}
44+
45+
protected function doSend(SentMessage $message): void
46+
{
47+
$onDoSend = $this->onDoSend;
48+
$onDoSend($message);
49+
}
50+
};
51+
52+
$mailer = new Mailer($testTransport, null);
53+
54+
$message = (new Email())
55+
->subject('Test subject')
56+
->text('Hello world')
57+
->from('from@example.org')
58+
->to('to@example.org');
59+
60+
$mailer->send($message);
61+
}
62+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* F B3EB or the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
13+
use Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\TestBundle;
14+
15+
return [
16+
new FrameworkBundle(),
17+
new TestBundle(),
18+
];
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
imports:
2+
- { resource: ../config/default.yml }
3+
4+
framework:
5+
mailer:
6+
envelope:
7+
sender: sender@example.org
8+
recipients:
9+
- redirected@example.org

0 commit comments

Comments
 (0)
0