diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php index 5de2bb0199..e515a57691 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php @@ -65,6 +65,7 @@ class SesApiAsyncAwsTransportTest extends TestCase $this->assertSame('Hello!', $content['Content']['Simple']['Subject']['Data']); $this->assertSame('"Saif Eddin" ', $content['Destination']['ToAddresses'][0]); + $this->assertSame('=?UTF-8?B?SsOpcsOpbXk=?= ', $content['Destination']['CcAddresses'][0]); $this->assertSame('"Fabien" ', $content['FromEmailAddress']); $this->assertSame('Hello There!', $content['Content']['Simple']['Body']['Text']['Data']); $this->assertSame('Hello There!', $content['Content']['Simple']['Body']['Html']['Data']); @@ -84,6 +85,7 @@ class SesApiAsyncAwsTransportTest extends TestCase $mail = new Email(); $mail->subject('Hello!') ->to(new Address('saif.gmati@symfony.com', 'Saif Eddin')) + ->cc(new Address('jeremy@derusse.com', 'Jérémy')) ->from(new Address('fabpot@symfony.com', 'Fabien')) ->text('Hello There!') ->html('Hello There!') 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 e19241d416..59ba12dc34 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php @@ -66,6 +66,7 @@ class SesApiTransportTest extends TestCase $this->assertSame('Hello!', $content['Message_Subject_Data']); $this->assertSame('"Saif Eddin" ', $content['Destination_ToAddresses_member'][0]); + $this->assertSame('=?UTF-8?B?SsOpcsOpbXk=?= ', $content['Destination_CcAddresses_member'][0]); $this->assertSame('"Fabien" ', $content['Source']); $this->assertSame('Hello There!', $content['Message_Body_Text_Data']); $this->assertSame('aws-configuration-set-name', $content['ConfigurationSetName']); @@ -86,6 +87,7 @@ class SesApiTransportTest extends TestCase $mail = new Email(); $mail->subject('Hello!') ->to(new Address('saif.gmati@symfony.com', 'Saif Eddin')) + ->cc(new Address('jeremy@derusse.com', 'Jérémy')) ->from(new Address('fabpot@symfony.com', 'Fabien')) ->text('Hello There!'); diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php index 0791a64aa2..9e6d8f6c0f 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php @@ -107,4 +107,19 @@ class SesApiAsyncAwsTransport extends SesHttpAsyncAwsTransport return !\in_array($address, $emailRecipients, true); }); } + + protected function stringifyAddresses(array $addresses): array + { + return array_map(function (Address $a) { + // AWS does not support UTF-8 address + if (preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $name = $a->getName())) { + return sprintf('=?UTF-8?B?%s?= <%s>', + base64_encode($name), + $a->getEncodedAddress() + ); + } + + return $a->toString(); + }, $addresses); + } } diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiTransport.php index 3368261518..081fcb799a 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiTransport.php @@ -16,6 +16,7 @@ use Symfony\Component\Mailer\Envelope; use Symfony\Component\Mailer\Exception\HttpTransportException; use Symfony\Component\Mailer\SentMessage; use Symfony\Component\Mailer\Transport\AbstractApiTransport; +use Symfony\Component\Mime\Address; use Symfony\Component\Mime\Email; use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -130,4 +131,19 @@ class SesApiTransport extends AbstractApiTransport return $payload; } + + protected function stringifyAddresses(array $addresses): array + { + return array_map(function (Address $a) { + // AWS does not support UTF-8 address + if (preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $name = $a->getName())) { + return sprintf('=?UTF-8?B?%s?= <%s>', + base64_encode($name), + $a->getEncodedAddress() + ); + } + + return $a->toString(); + }, $addresses); + } }