From 603834301e926cd9dd3ffbdf4f167ea05012b104 Mon Sep 17 00:00:00 2001 From: Pavel Starosek Date: Tue, 5 Nov 2024 01:51:18 +0500 Subject: [PATCH] [Mailer] [Amazon] Add support for custom headers in ses+api --- .../Mailer/Bridge/Amazon/CHANGELOG.md | 5 ++++ .../Transport/SesApiAsyncAwsTransportTest.php | 2 ++ .../Transport/SesApiAsyncAwsTransport.php | 27 +++++++++++++++++++ .../Mailer/Bridge/Amazon/composer.json | 2 +- 4 files changed, 35 insertions(+), 1 deletion(-) 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": { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy