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 88e1bd98cc..2cd87cf96b 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 @@ class SesApiAsyncAwsTransportTest extends TestCase
$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 @@ class SesApiAsyncAwsTransportTest extends TestCase
->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 2a4adfa418..b4dfa191ae 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 @@ class SesApiTransportTest extends TestCase
$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 @@ class SesApiTransportTest extends TestCase
->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 ff3a6e23ad..5b79491fbc 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 @@ class SesHttpAsyncAwsTransportTest extends TestCase
$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 @@ class SesHttpAsyncAwsTransportTest extends TestCase
->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 994990443d..e1f28be824 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 @@ class SesHttpTransportTest extends TestCase
$this->assertStringContainsString('Fabien ', $content);
$this->assertStringContainsString('Hello There!', $content);
+ $this->assertSame('aws-configuration-set-name', $body['ConfigurationSetName']);
+
$xml = '
foobar
@@ -89,6 +91,8 @@ class SesHttpTransportTest extends TestCase
->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 e7878ccc8b..9c03fe3744 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 @@ class SesApiAsyncAwsTransport extends SesHttpAsyncAwsTransport
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 45ccd65cdf..b872be52c6 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 @@ class SesApiTransport extends AbstractApiTransport
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 @@ class SesApiTransport extends AbstractApiTransport
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 284e56b331..58ae25e792 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 Psr\Log\LoggerInterface;
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 @@ class SesHttpAsyncAwsTransport extends AbstractTransport
protected function getRequest(SentMessage $message): SendEmailRequest
{
- return new SendEmailRequest([
+ $request = [
'Destination' => new Destination([
'ToAddresses' => $this->stringifyAddresses($message->getEnvelope()->getRecipients()),
]),
@@ -76,6 +77,13 @@ class SesHttpAsyncAwsTransport extends AbstractTransport
'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 e3fefd4583..20af6c519a 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 Psr\Log\LoggerInterface;
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 @@ class SesHttpTransport extends AbstractHttpTransport
$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 @@ class SesHttpTransport extends AbstractHttpTransport
'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()) {