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 88e1bd98ccf21..2cd87cf96b2fa 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiAsyncAwsTransportTest.php
@@ -69,6 +69,7 @@ public function testSend()
$this->assertSame('Hello There!', $content['Content']['Simple']['Body']['Text']['Data']);
$this->assertSame('Hello There!', $content['Content']['Simple']['Body']['Html']['Data']);
$this->assertSame(['replyto-1@example.com', 'replyto-2@example.com'], $content['ReplyToAddresses']);
+ $this->assertSame('aws-configuration-set-name', $content['ConfigurationSetName']);
$json = '{"MessageId": "foobar"}';
@@ -87,6 +88,8 @@ public function testSend()
->html('Hello There!')
->replyTo(new Address('replyto-1@example.com'), new Address('replyto-2@example.com'));
+ $mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
+
$message = $transport->send($mail);
$this->assertSame('foobar', $message->getMessageId());
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 2a4adfa418a74..b4dfa191aea0f 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php
@@ -68,6 +68,7 @@ public function testSend()
$this->assertSame('Saif Eddin ', $content['Destination_ToAddresses_member'][0]);
$this->assertSame('Fabien ', $content['Source']);
$this->assertSame('Hello There!', $content['Message_Body_Text_Data']);
+ $this->assertSame('aws-configuration-set-name', $content['ConfigurationSetName']);
$xml = '
@@ -88,6 +89,53 @@ public function testSend()
->from(new Address('fabpot@symfony.com', 'Fabien'))
->text('Hello There!');
+ $mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
+
+ $message = $transport->send($mail);
+
+ $this->assertSame('foobar', $message->getMessageId());
+ }
+
+ public function testSendWithAttachments()
+ {
+ $client = new MockHttpClient(function (string $method, string $url, array $options): ResponseInterface {
+ $this->assertSame('POST', $method);
+ $this->assertSame('https://email.eu-west-1.amazonaws.com:8984/', $url);
+ $this->assertStringContainsStringIgnoringCase('X-Amzn-Authorization: AWS3-HTTPS AWSAccessKeyId=ACCESS_KEY,Algorithm=HmacSHA256,Signature=', $options['headers'][0] ?? $options['request_headers'][0]);
+
+ parse_str($options['body'], $body);
+ $content = base64_decode($body['RawMessage_Data']);
+
+ $this->assertStringContainsString('Hello!', $content);
+ $this->assertStringContainsString('Saif Eddin ', $content);
+ $this->assertStringContainsString('Fabien ', $content);
+ $this->assertStringContainsString('Hello There!', $content);
+ $this->assertStringContainsString(base64_encode('attached data'), $content);
+
+ $this->assertSame('aws-configuration-set-name', $body['ConfigurationSetName']);
+
+ $xml = '
+
+ foobar
+
+';
+
+ return new MockResponse($xml, [
+ 'http_code' => 200,
+ ]);
+ });
+ $transport = new SesApiTransport('ACCESS_KEY', 'SECRET_KEY', null, $client);
+ $transport->setPort(8984);
+
+ $mail = new Email();
+ $mail->subject('Hello!')
+ ->to(new Address('saif.gmati@symfony.com', 'Saif Eddin'))
+ ->from(new Address('fabpot@symfony.com', 'Fabien'))
+ ->text('Hello There!')
+ ->attach('attached data');
+
+ $mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
+
$message = $transport->send($mail);
$this->assertSame('foobar', $message->getMessageId());
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php
index ff3a6e23adcf1..5b79491fbcb0d 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpAsyncAwsTransportTest.php
@@ -68,6 +68,7 @@ public function testSend()
$this->assertStringContainsString('Saif Eddin ', $content);
$this->assertStringContainsString('Fabien ', $content);
$this->assertStringContainsString('Hello There!', $content);
+ $this->assertSame('aws-configuration-set-name', $body['ConfigurationSetName']);
$json = '{"MessageId": "foobar"}';
@@ -84,6 +85,8 @@ public function testSend()
->from(new Address('fabpot@symfony.com', 'Fabien'))
->text('Hello There!');
+ $mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
+
$message = $transport->send($mail);
$this->assertSame('foobar', $message->getMessageId());
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpTransportTest.php
index 994990443d31a..e1f28be82497c 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpTransportTest.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesHttpTransportTest.php
@@ -70,6 +70,8 @@ public function testSend()
$this->assertStringContainsString('Fabien ', $content);
$this->assertStringContainsString('Hello There!', $content);
+ $this->assertSame('aws-configuration-set-name', $body['ConfigurationSetName']);
+
$xml = '
foobar
@@ -89,6 +91,8 @@ public function testSend()
->from(new Address('fabpot@symfony.com', 'Fabien'))
->text('Hello There!');
+ $mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
+
$message = $transport->send($mail);
$this->assertSame('foobar', $message->getMessageId());
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php
index e7878ccc8b7e6..9c03fe37445a8 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiAsyncAwsTransport.php
@@ -89,6 +89,9 @@ protected function getRequest(SentMessage $message): SendEmailRequest
if ($emails = $email->getReplyTo()) {
$request['ReplyToAddresses'] = $this->stringifyAddresses($emails);
}
+ if ($header = $email->getHeaders()->get('X-SES-CONFIGURATION-SET')) {
+ $request['ConfigurationSetName'] = $header->getBodyAsString();
+ }
return new SendEmailRequest($request);
}
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiTransport.php
index 45ccd65cdf13f..b872be52c6195 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiTransport.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesApiTransport.php
@@ -90,10 +90,16 @@ private function getSignature(string $string): string
private function getPayload(Email $email, Envelope $envelope): array
{
if ($email->getAttachments()) {
- return [
+ $payload = [
'Action' => 'SendRawEmail',
'RawMessage.Data' => base64_encode($email->toString()),
];
+
+ if ($header = $email->getHeaders()->get('X-SES-CONFIGURATION-SET')) {
+ $payload['ConfigurationSetName'] = $header->getBodyAsString();
+ }
+
+ return $payload;
}
$payload = [
@@ -118,6 +124,9 @@ private function getPayload(Email $email, Envelope $envelope): array
if ($email->getReplyTo()) {
$payload['ReplyToAddresses.member'] = $this->stringifyAddresses($email->getReplyTo());
}
+ if ($header = $email->getHeaders()->get('X-SES-CONFIGURATION-SET')) {
+ $payload['ConfigurationSetName'] = $header->getBodyAsString();
+ }
return $payload;
}
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpAsyncAwsTransport.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpAsyncAwsTransport.php
index 284e56b331a45..58ae25e792190 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpAsyncAwsTransport.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpAsyncAwsTransport.php
@@ -19,6 +19,7 @@
use Symfony\Component\Mailer\Exception\HttpTransportException;
use Symfony\Component\Mailer\SentMessage;
use Symfony\Component\Mailer\Transport\AbstractTransport;
+use Symfony\Component\Mime\Message;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
/**
@@ -67,7 +68,7 @@ protected function doSend(SentMessage $message): void
protected function getRequest(SentMessage $message): SendEmailRequest
{
- return new SendEmailRequest([
+ $request = [
'Destination' => new Destination([
'ToAddresses' => $this->stringifyAddresses($message->getEnvelope()->getRecipients()),
]),
@@ -76,6 +77,13 @@ protected function getRequest(SentMessage $message): SendEmailRequest
'Data' => $message->toString(),
],
],
- ]);
+ ];
+
+ if (($message->getOriginalMessage() instanceof Message)
+ && $configurationSetHeader = $message->getOriginalMessage()->getHeaders()->get('X-SES-CONFIGURATION-SET')) {
+ $request['ConfigurationSetName'] = $configurationSetHeader->getBodyAsString();
+ }
+
+ return new SendEmailRequest($request);
}
}
diff --git a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpTransport.php b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpTransport.php
index e3fefd4583a5e..20af6c519a3b9 100644
--- a/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpTransport.php
+++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Transport/SesHttpTransport.php
@@ -15,6 +15,7 @@
use Symfony\Component\Mailer\Exception\HttpTransportException;
use Symfony\Component\Mailer\SentMessage;
use Symfony\Component\Mailer\Transport\AbstractHttpTransport;
+use Symfony\Component\Mime\Message;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\ResponseInterface;
@@ -54,7 +55,7 @@ protected function doSendHttp(SentMessage $message): ResponseInterface
$date = gmdate('D, d M Y H:i:s e');
$auth = sprintf('AWS3-HTTPS AWSAccessKeyId=%s,Algorithm=HmacSHA256,Signature=%s', $this->accessKey, $this->getSignature($date));
- $response = $this->client->request('POST', 'https://'.$this->getEndpoint(), [
+ $request = [
'headers' => [
'X-Amzn-Authorization' => $auth,
'Date' => $date,
@@ -63,7 +64,14 @@ protected function doSendHttp(SentMessage $message): ResponseInterface
'Action' => 'SendRawEmail',
'RawMessage.Data' => base64_encode($message->toString()),
],
- ]);
+ ];
+
+ if (($message->getOriginalMessage() instanceof Message)
+ && $configurationSetHeader = $message->getOriginalMessage()->getHeaders()->get('X-SES-CONFIGURATION-SET')) {
+ $request['body']['ConfigurationSetName'] = $configurationSetHeader->getBodyAsString();
+ }
+
+ $response = $this->client->request('POST', 'https://'.$this->getEndpoint(), $request);
$result = new \SimpleXMLElement($response->getContent(false));
if (200 !== $response->getStatusCode()) {