diff --git a/src/Symfony/Bridge/Twig/Mime/BodyRenderer.php b/src/Symfony/Bridge/Twig/Mime/BodyRenderer.php index 2f1a1fb049e7..1af04720d141 100644 --- a/src/Symfony/Bridge/Twig/Mime/BodyRenderer.php +++ b/src/Symfony/Bridge/Twig/Mime/BodyRenderer.php @@ -13,6 +13,7 @@ use League\HTMLToMarkdown\HtmlConverter; use Symfony\Component\Mime\BodyRendererInterface; +use Symfony\Component\Mime\Exception\InvalidArgumentException; use Symfony\Component\Mime\Message; use Twig\Environment; @@ -44,7 +45,12 @@ public function render(Message $message): void return; } - $vars = array_merge($this->context, $message->getContext(), [ + $messageContext = $message->getContext(); + if (isset($messageContext['email'])) { + throw new InvalidArgumentException(sprintf('A "%s" context cannot have an "email" entry as this is a reserved variable.', TemplatedEmail::class)); + } + + $vars = array_merge($this->context, $messageContext, [ 'email' => new WrappedTemplatedEmail($this->twig, $message), ]); diff --git a/src/Symfony/Bridge/Twig/Tests/Mime/RendererTest.php b/src/Symfony/Bridge/Twig/Tests/Mime/BodyRendererTest.php similarity index 80% rename from src/Symfony/Bridge/Twig/Tests/Mime/RendererTest.php rename to src/Symfony/Bridge/Twig/Tests/Mime/BodyRendererTest.php index 3c40e6d7ee04..6eeade3a737a 100644 --- a/src/Symfony/Bridge/Twig/Tests/Mime/RendererTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Mime/BodyRendererTest.php @@ -14,11 +14,12 @@ use PHPUnit\Framework\TestCase; use Symfony\Bridge\Twig\Mime\BodyRenderer; use Symfony\Bridge\Twig\Mime\TemplatedEmail; +use Symfony\Component\Mime\Exception\InvalidArgumentException; use Symfony\Component\Mime\Part\Multipart\AlternativePart; use Twig\Environment; use Twig\Loader\ArrayLoader; -class RendererTest extends TestCase +class BodyRendererTest extends TestCase { public function testRenderTextOnly(): void { @@ -54,7 +55,13 @@ public function testRenderTextAndHtml(): void $this->assertEquals('HTML', $body->getParts()[1]->bodyToString()); } - private function prepareEmail(?string $text, ?string $html): TemplatedEmail + public function testRenderWithContextReservedEmailEntry(): void + { + $this->expectException(InvalidArgumentException::class); + $this->prepareEmail('Text', '', ['email' => 'reserved!']); + } + + private function prepareEmail(?string $text, ?string $html, array $context = []): TemplatedEmail { $twig = new Environment(new ArrayLoader([ 'text' => $text, @@ -63,7 +70,11 @@ private function prepareEmail(?string $text, ?string $html): TemplatedEmail 'image.jpg' => 'Some image data', ])); $renderer = new BodyRenderer($twig); - $email = (new TemplatedEmail())->to('fabien@symfony.com')->from('helene@symfony.com'); + $email = (new TemplatedEmail()) + ->to('fabien@symfony.com') + ->from('helene@symfony.com') + ->context($context) + ; if (null !== $text) { $email->textTemplate('text'); }