From 0f3b2f79fdfa4d60df5b9f843243f4dd59dafe15 Mon Sep 17 00:00:00 2001 From: Pavel Stejskal Date: Mon, 29 Jan 2024 12:09:31 +0100 Subject: [PATCH] [Mailer] [Mailgun] Fix sender header encoding --- .../Tests/Transport/MailgunApiTransportTest.php | 13 +++++++++++++ .../Mailgun/Transport/MailgunApiTransport.php | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) 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 e60a153850711..9a3b7dd1f668b 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailgun/Tests/Transport/MailgunApiTransportTest.php @@ -270,4 +270,17 @@ public function testTagAndMetadataHeaders() $this->assertArrayHasKey('v:Client-ID', $payload); $this->assertSame('12345', $payload['v:Client-ID']); } + + public function testEnvelopeSenderHeaderIsCorrectlyEncoded() + { + $email = new Email(); + $envelope = new Envelope(new Address('alice@system.com', 'Žluťoučký Kůň'), [new Address('bob@system.com')]); + + $transport = new MailgunApiTransport('ACCESS_KEY', 'DOMAIN'); + $method = new \ReflectionMethod(MailgunApiTransport::class, 'getPayload'); + $payload = $method->invoke($transport, $email, $envelope); + + $this->assertArrayHasKey('h:Sender', $payload); + $this->assertSame('=?utf-8?Q?=C5=BDlu=C5=A5ou=C4=8Dk=C3=BD_K=C5=AF=C5=88?= ', $payload['h:Sender']); + } } diff --git a/src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php index 04aae4926f1a6..f516854226ba9 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailgun/Transport/MailgunApiTransport.php @@ -87,7 +87,7 @@ protected function doSendApi(SentMessage $sentMessage, Email $email, Envelope $e private function getPayload(Email $email, Envelope $envelope): array { $headers = $email->getHeaders(); - $headers->addHeader('h:Sender', $envelope->getSender()->toString()); + $headers->addMailboxHeader('h:Sender', $envelope->getSender()); $html = $email->getHtmlBody(); if (null !== $html && \is_resource($html)) { if (stream_get_meta_data($html)['seekable'] ?? false) {