Skip to content

Commit 8b8e1d4

Browse files
committed
bug symfony#48366 [Mailer] Fix body renderer check (fabpot)
This PR was merged into the 6.2 branch. Discussion ---------- [Mailer] Fix body renderer check | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no <!-- please update src/**/CHANGELOG.md files --> | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tickets | n/a <!-- prefix each issue number with "Fix #", no need to create an issue if none exists, explain below instead --> | License | MIT | Doc PR | n/a What I did in symfony#47049 does not work as one can have many message listeners. So, we need to do this check after all listeners are run. Commits ------- 8bb7522 [Mailer] Fix body renderer check
2 parents 1eeb7a8 + 8bb7522 commit 8b8e1d4

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

src/Symfony/Component/Mailer/EventListener/MessageListener.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@
1111

1212
namespace Symfony\Component\Mailer\EventListener;
1313

14-
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
1514
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
1615
use Symfony\Component\Mailer\Event\MessageEvent;
1716
use Symfony\Component\Mailer\Exception\InvalidArgumentException;
18-
use Symfony\Component\Mailer\Exception\LogicException;
1917
use Symfony\Component\Mailer\Exception\RuntimeException;
2018
use Symfony\Component\Mime\BodyRendererInterface;
2119
use Symfony\Component\Mime\Header\Headers;
@@ -121,10 +119,6 @@ private function setHeaders(Message $message): void
121119
private function renderMessage(Message $message): void
122120
{
123121
if (!$this->renderer) {
124-
if ($message instanceof TemplatedEmail && ($message->getTextTemplate() || $message->getHtmlTemplate())) {
125-
throw new LogicException(sprintf('You must configure a "%s" when a "%s" instance has a text or HTML template set.', BodyRendererInterface::class, get_debug_type($message)));
126-
}
127-
128122
return;
129123
}
130124

src/Symfony/Component/Mailer/Tests/Transport/AbstractTransportTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,17 @@
1212
namespace Symfony\Component\Mailer\Tests\Transport;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Bridge\Twig\Mime\BodyRenderer;
16+
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
17+
use Symfony\Component\EventDispatcher\EventDispatcher;
1518
use Symfony\Component\Mailer\Envelope;
19+
use Symfony\Component\Mailer\EventListener\MessageListener;
1620
use Symfony\Component\Mailer\Exception\LogicException;
1721
use Symfony\Component\Mailer\Transport\NullTransport;
1822
use Symfony\Component\Mime\Address;
1923
use Symfony\Component\Mime\RawMessage;
24+
use Twig\Environment;
25+
use Twig\Loader\ArrayLoader;
2026

2127
/**
2228
* @group time-sensitive
@@ -55,4 +61,21 @@ public function testSendingRawMessages()
5561
$transport = new NullTransport();
5662
$transport->send(new RawMessage('Some raw email message'));
5763
}
64+
65+
public function testNotRenderedTemplatedEmail()
66+
{
67+
$this->expectException(LogicException::class);
68+
69+
$transport = new NullTransport(new EventDispatcher());
70+
$transport->send((new TemplatedEmail())->htmlTemplate('Some template'));
71+
}
72+
73+
public function testRenderedTemplatedEmail()
74+
{
75+
$transport = new NullTransport($dispatcher = new EventDispatcher());
76+
$dispatcher->addSubscriber(new MessageListener(null, new BodyRenderer(new Environment(new ArrayLoader(['tpl' => 'Some message'])))));
77+
78+
$sentMessage = $transport->send((new TemplatedEmail())->to('[email protected]')->from('[email protected]')->htmlTemplate('tpl'));
79+
$this->assertMatchesRegularExpression('/Some message/', $sentMessage->getMessage()->toString());
80+
}
5881
}

src/Symfony/Component/Mailer/Transport/AbstractTransport.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@
1414
use Psr\EventDispatcher\EventDispatcherInterface;
1515
use Psr\Log\LoggerInterface;
1616
use Psr\Log\NullLogger;
17+
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
1718
use Symfony\Component\Mailer\Envelope;
1819
use Symfony\Component\Mailer\Event\FailedMessageEvent;
1920
use Symfony\Component\Mailer\Event\MessageEvent;
2021
use Symfony\Component\Mailer\Event\SentMessageEvent;
22+
use Symfony\Component\Mailer\Exception\LogicException;
2123
use Symfony\Component\Mailer\SentMessage;
2224
use Symfony\Component\Mime\Address;
25+
use Symfony\Component\Mime\BodyRendererInterface;
2326
use Symfony\Component\Mime\RawMessage;
2427

2528
/**
@@ -73,6 +76,10 @@ public function send(RawMessage $message, Envelope $envelope = null): ?SentMessa
7376
$envelope = $event->getEnvelope();
7477
$message = $event->getMessage();
7578

79+
if ($message instanceof TemplatedEmail && ($message->getTextTemplate() || $message->getHtmlTemplate())) {
80+
throw new LogicException(sprintf('You must configure a "%s" when a "%s" instance has a text or HTML template set.', BodyRendererInterface::class, get_debug_type($message)));
81+
}
82+
7683
$sentMessage = new SentMessage($message, $envelope);
7784

7885
try {

src/Symfony/Component/Mailer/composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
"require-dev": {
2828
"symfony/console": "^5.4|^6.0",
2929
"symfony/http-client-contracts": "^1.1|^2|^3",
30-
"symfony/messenger": "^6.2"
30+
"symfony/messenger": "^6.2",
31+
"symfony/twig-bridge": "^6.2"
3132
},
3233
"conflict": {
3334
"symfony/http-kernel": "<5.4",

0 commit comments

Comments
 (0)