From 39e9158999cca0ad76f920fd4ff2c6a2078215e9 Mon Sep 17 00:00:00 2001 From: YaFou <33806646+YaFou@users.noreply.github.com> Date: Sun, 17 Jan 2021 14:43:11 +0100 Subject: [PATCH] [Mime] Escape commas in address names --- .../Amazon/Tests/Transport/SesApiTransportTest.php | 4 ++-- .../Tests/Transport/MailgunApiTransportTest.php | 4 ++-- .../Tests/Transport/PostmarkApiTransportTest.php | 4 ++-- src/Symfony/Component/Mime/Address.php | 11 ++++++++++- src/Symfony/Component/Mime/Tests/AddressTest.php | 8 +++++++- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php index 254a1ff84e..d795457560 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php @@ -62,8 +62,8 @@ class SesApiTransportTest extends TestCase parse_str($options['body'], $content); $this->assertSame('Hello!', $content['Message_Subject_Data']); - $this->assertSame('Saif Eddin ', $content['Destination_ToAddresses_member'][0]); - $this->assertSame('Fabien ', $content['Source']); + $this->assertSame('"Saif Eddin" ', $content['Destination_ToAddresses_member'][0]); + $this->assertSame('"Fabien" ', $content['Source']); $this->assertSame('Hello There!', $content['Message_Body_Text_Data']); $xml = ' diff --git a/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php index b4d235671c..2e4c53b83f 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php @@ -82,8 +82,8 @@ class MailgunApiTransportTest extends TestCase } $this->assertStringContainsString('Hello!', $content); - $this->assertStringContainsString('Saif Eddin ', $content); - $this->assertStringContainsString('Fabien ', $content); + $this->assertStringContainsString('"Saif Eddin" ', $content); + $this->assertStringContainsString('"Fabien" ', $content); $this->assertStringContainsString('Hello There!', $content); return new MockResponse(json_encode(['id' => 'foobar']), [ diff --git a/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php index 356880bc20..a7c7259ce3 100644 --- a/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Postmark/Tests/Transport/PostmarkApiTransportTest.php @@ -74,8 +74,8 @@ class PostmarkApiTransportTest extends TestCase $this->assertStringContainsStringIgnoringCase('X-Postmark-Server-Token: KEY', $options['headers'][1] ?? $options['request_headers'][1]); $body = json_decode($options['body'], true); - $this->assertSame('Fabien ', $body['From']); - $this->assertSame('Saif Eddin ', $body['To']); + $this->assertSame('"Fabien" ', $body['From']); + $this->assertSame('"Saif Eddin" ', $body['To']); $this->assertSame('Hello!', $body['Subject']); $this->assertSame('Hello There!', $body['TextBody']); diff --git a/src/Symfony/Component/Mime/Address.php b/src/Symfony/Component/Mime/Address.php index 53f682c9c2..730b413e0c 100644 --- a/src/Symfony/Component/Mime/Address.php +++ b/src/Symfony/Component/Mime/Address.php @@ -77,7 +77,16 @@ final class Address public function toString(): string { - return ($n = $this->getName()) ? $n.' <'.$this->getEncodedAddress().'>' : $this->getEncodedAddress(); + return ($n = $this->getEncodedName()) ? $n.' <'.$this->getEncodedAddress().'>' : $this->getEncodedAddress(); + } + + public function getEncodedName(): string + { + if ('' === $this->getName()) { + return ''; + } + + return sprintf('"%s"', preg_replace('/"/u', '\"', $this->getName())); } /** diff --git a/src/Symfony/Component/Mime/Tests/AddressTest.php b/src/Symfony/Component/Mime/Tests/AddressTest.php index 50d5780d82..476bb9c91a 100644 --- a/src/Symfony/Component/Mime/Tests/AddressTest.php +++ b/src/Symfony/Component/Mime/Tests/AddressTest.php @@ -27,7 +27,7 @@ class AddressTest extends TestCase $a = new Address('fabien@symfonï.com', 'Fabien'); $this->assertEquals('Fabien', $a->getName()); $this->assertEquals('fabien@symfonï.com', $a->getAddress()); - $this->assertEquals('Fabien ', $a->toString()); + $this->assertEquals('"Fabien" ', $a->toString()); $this->assertEquals('fabien@xn--symfon-nwa.com', $a->getEncodedAddress()); } @@ -153,4 +153,10 @@ class AddressTest extends TestCase ], ]; } + + public function testEncodeNameIfNameContainsCommas() + { + $address = new Address('fabien@symfony.com', 'Fabien, "Potencier'); + $this->assertSame('"Fabien, \"Potencier" ', $address->toString()); + } }