[Mime] Escape commas in address names

This commit is contained in:
YaFou 2021-01-17 14:43:11 +01:00
parent d23b74ebce
commit 39e9158999
No known key found for this signature in database
GPG Key ID: A112DE339CED408A
5 changed files with 23 additions and 8 deletions

View File

@ -62,8 +62,8 @@ class SesApiTransportTest extends TestCase
parse_str($options['body'], $content);
$this->assertSame('Hello!', $content['Message_Subject_Data']);
$this->assertSame('Saif Eddin <saif.gmati@symfony.com>', $content['Destination_ToAddresses_member'][0]);
$this->assertSame('Fabien <fabpot@symfony.com>', $content['Source']);
$this->assertSame('"Saif Eddin" <saif.gmati@symfony.com>', $content['Destination_ToAddresses_member'][0]);
$this->assertSame('"Fabien" <fabpot@symfony.com>', $content['Source']);
$this->assertSame('Hello There!', $content['Message_Body_Text_Data']);
$xml = '<SendEmailResponse xmlns="https://email.amazonaws.com/doc/2010-03-31/">

View File

@ -82,8 +82,8 @@ class MailgunApiTransportTest extends TestCase
}
$this->assertStringContainsString('Hello!', $content);
$this->assertStringContainsString('Saif Eddin <saif.gmati@symfony.com>', $content);
$this->assertStringContainsString('Fabien <fabpot@symfony.com>', $content);
$this->assertStringContainsString('"Saif Eddin" <saif.gmati@symfony.com>', $content);
$this->assertStringContainsString('"Fabien" <fabpot@symfony.com>', $content);
$this->assertStringContainsString('Hello There!', $content);
return new MockResponse(json_encode(['id' => 'foobar']), [

View File

@ -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 <fabpot@symfony.com>', $body['From']);
$this->assertSame('Saif Eddin <saif.gmati@symfony.com>', $body['To']);
$this->assertSame('"Fabien" <fabpot@symfony.com>', $body['From']);
$this->assertSame('"Saif Eddin" <saif.gmati@symfony.com>', $body['To']);
$this->assertSame('Hello!', $body['Subject']);
$this->assertSame('Hello There!', $body['TextBody']);

View File

@ -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()));
}
/**

View File

@ -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 <fabien@xn--symfon-nwa.com>', $a->toString());
$this->assertEquals('"Fabien" <fabien@xn--symfon-nwa.com>', $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" <fabien@symfony.com>', $address->toString());
}
}