diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/CHANGELOG.md b/src/Symfony/Component/Mailer/Bridge/Amazon/CHANGELOG.md index ef61ac9a14c0a..c5eb4d72af2c8 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/CHANGELOG.md +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +7.2 +--- + +* Add support for custom headers in ses+api + 7.1 --- 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 0bf19423c31d1..8610a9db72674 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php @@ -92,6 +92,7 @@ public function testSend() $this->assertSame('bounces@example.com', $content['FeedbackForwardingEmailAddress']); $this->assertSame([['Name' => 'tagName1', 'Value' => 'tag Value1'], ['Name' => 'tagName2', 'Value' => 'tag Value2']], $content['EmailTags']); $this->assertSame(['ContactListName' => 'TestContactList', 'TopicName' => 'TestNewsletter'], $content['ListManagementOptions']); + $this->assertSame([['Name' => 'X-Custom-Header', 'Value' => 'foobar']], $content['Content']['Simple']['Headers']); $json = '{"MessageId": "foobar"}'; @@ -115,6 +116,7 @@ public function testSend() $mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name'); $mail->getHeaders()->addTextHeader('X-SES-SOURCE-ARN', 'aws-source-arn'); $mail->getHeaders()->addTextHeader('X-SES-LIST-MANAGEMENT-OPTIONS', 'contactListName=TestContactList;topicName=TestNewsletter'); + $mail->getHeaders()->addTextHeader('X-Custom-Header', 'foobar'); $mail->getHeaders()->add(new MetadataHeader('tagName1', 'tag Value1')); $mail->getHeaders()->add(new MetadataHeader('tagName2', 'tag Value2')); diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php index 1582e9a1e4400..67ace3339c3b5 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php @@ -107,6 +107,10 @@ protected function getRequest(SentMessage $message): SendEmailRequest $request['FeedbackForwardingEmailAddress'] = $email->getReturnPath()->toString(); } + if ($customHeaders = $this->getCustomHeaders($email->getHeaders())) { + $request['Content']['Simple']['Headers'] = $customHeaders; + } + foreach ($email->getHeaders()->all() as $header) { if ($header instanceof MetadataHeader) { $request['EmailTags'][] = ['Name' => $header->getKey(), 'Value' => $header->getValue()]; @@ -123,6 +127,29 @@ private function getRecipients(Email $email, Envelope $envelope): array return array_filter($envelope->getRecipients(), fn (Address $address) => !\in_array($address, $emailRecipients, true)); } + private function getCustomHeaders(Headers $headers): array + { + $headersPrepared = []; + + $headersToBypass = ['from', 'to', 'cc', 'bcc', 'return-path', 'subject', 'reply-to', 'sender', 'content-type', 'x-ses-configuration-set', 'x-ses-source-arn', 'x-ses-list-management-options']; + foreach ($headers->all() as $name => $header) { + if (\in_array($name, $headersToBypass, true)) { + continue; + } + + if ($header instanceof MetadataHeader) { + continue; + } + + $headersPrepared[] = [ + 'Name' => $header->getName(), + 'Value' => $header->getBodyAsString(), + ]; + } + + return $headersPrepared; + } + protected function stringifyAddresses(array $addresses): array { return array_map(fn (Address $a) => $this->stringifyAddress($a), $addresses); diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/composer.json b/src/Symfony/Component/Mailer/Bridge/Amazon/composer.json index bfa2af6f3cbb5..3b8cd7cd49cb9 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/composer.json +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/composer.json @@ -17,7 +17,7 @@ ], "require": { "php": ">=8.2", - "async-aws/ses": "^1.3", + "async-aws/ses": "^1.8", "symfony/mailer": "^7.2" }, "require-dev": {
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: