[Mailer] AWS SES transport Source ARN header support

This commit is contained in:
Ilya Chekalsky 2021-02-13 02:05:39 +01:00 committed by Fabien Potencier
parent c757845643
commit d7225db7d5
9 changed files with 29 additions and 0 deletions

View File

@ -70,6 +70,7 @@ class SesApiAsyncAwsTransportTest extends TestCase
$this->assertSame('<b>Hello There!</b>', $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']);
$this->assertSame('aws-source-arn', $content['FromEmailAddressIdentityArn']);
$this->assertSame('bounces@example.com', $content['FeedbackForwardingEmailAddress']);
$json = '{"MessageId": "foobar"}';
@ -91,6 +92,7 @@ class SesApiAsyncAwsTransportTest extends TestCase
->returnPath(new Address('bounces@example.com'));
$mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
$mail->getHeaders()->addTextHeader('X-SES-SOURCE-ARN', 'aws-source-arn');
$message = $transport->send($mail);

View File

@ -69,6 +69,7 @@ class SesApiTransportTest extends TestCase
$this->assertSame('Fabien <fabpot@symfony.com>', $content['Source']);
$this->assertSame('Hello There!', $content['Message_Body_Text_Data']);
$this->assertSame('aws-configuration-set-name', $content['ConfigurationSetName']);
$this->assertSame('aws-source-arn', $content['FromEmailAddressIdentityArn']);
$xml = '<SendEmailResponse xmlns="https://email.amazonaws.com/doc/2010-03-31/">
<SendEmailResult>
@ -90,6 +91,7 @@ class SesApiTransportTest extends TestCase
->text('Hello There!');
$mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
$mail->getHeaders()->addTextHeader('X-SES-SOURCE-ARN', 'aws-source-arn');
$message = $transport->send($mail);
@ -135,6 +137,7 @@ class SesApiTransportTest extends TestCase
->attach('attached data');
$mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
$mail->getHeaders()->addTextHeader('X-SES-SOURCE-ARN', 'aws-source-arn');
$message = $transport->send($mail);

View File

@ -69,6 +69,7 @@ class SesHttpAsyncAwsTransportTest extends TestCase
$this->assertStringContainsString('Fabien <fabpot@symfony.com>', $content);
$this->assertStringContainsString('Hello There!', $content);
$this->assertSame('aws-configuration-set-name', $body['ConfigurationSetName']);
$this->assertSame('aws-source-arn', $body['FromEmailAddressIdentityArn']);
$json = '{"MessageId": "foobar"}';
@ -86,6 +87,7 @@ class SesHttpAsyncAwsTransportTest extends TestCase
->text('Hello There!');
$mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
$mail->getHeaders()->addTextHeader('X-SES-SOURCE-ARN', 'aws-source-arn');
$message = $transport->send($mail);

View File

@ -77,6 +77,7 @@ class SesHttpTransportTest extends TestCase
$this->assertStringContainsString('Hello There!', $content);
$this->assertSame('aws-configuration-set-name', $body['ConfigurationSetName']);
$this->assertSame('aws-source-arn', $body['FromEmailAddressIdentityArn']);
$xml = '<SendEmailResponse xmlns="https://email.amazonaws.com/doc/2010-03-31/">
<SendRawEmailResult>
@ -99,6 +100,7 @@ class SesHttpTransportTest extends TestCase
->text('Hello There!');
$mail->getHeaders()->addTextHeader('X-SES-CONFIGURATION-SET', 'aws-configuration-set-name');
$mail->getHeaders()->addTextHeader('X-SES-SOURCE-ARN', 'aws-source-arn');
$message = $transport->send($mail);

View File

@ -92,6 +92,9 @@ class SesApiAsyncAwsTransport extends SesHttpAsyncAwsTransport
if ($header = $email->getHeaders()->get('X-SES-CONFIGURATION-SET')) {
$request['ConfigurationSetName'] = $header->getBodyAsString();
}
if ($header = $email->getHeaders()->get('X-SES-SOURCE-ARN')) {
$request['FromEmailAddressIdentityArn'] = $header->getBodyAsString();
}
if ($email->getReturnPath()) {
$request['FeedbackForwardingEmailAddress'] = $email->getReturnPath()->toString();
}

View File

@ -99,6 +99,10 @@ class SesApiTransport extends AbstractApiTransport
$payload['ConfigurationSetName'] = $header->getBodyAsString();
}
if ($header = $email->getHeaders()->get('X-SES-SOURCE-ARN')) {
$payload['FromEmailAddressIdentityArn'] = $header->getBodyAsString();
}
return $payload;
}
@ -127,6 +131,9 @@ class SesApiTransport extends AbstractApiTransport
if ($header = $email->getHeaders()->get('X-SES-CONFIGURATION-SET')) {
$payload['ConfigurationSetName'] = $header->getBodyAsString();
}
if ($header = $email->getHeaders()->get('X-SES-SOURCE-ARN')) {
$payload['FromEmailAddressIdentityArn'] = $header->getBodyAsString();
}
return $payload;
}

View File

@ -83,6 +83,10 @@ class SesHttpAsyncAwsTransport extends AbstractTransport
&& $configurationSetHeader = $message->getOriginalMessage()->getHeaders()->get('X-SES-CONFIGURATION-SET')) {
$request['ConfigurationSetName'] = $configurationSetHeader->getBodyAsString();
}
if (($message->getOriginalMessage() instanceof Message)
&& $sourceArnHeader = $message->getOriginalMessage()->getHeaders()->get('X-SES-SOURCE-ARN')) {
$request['FromEmailAddressIdentityArn'] = $sourceArnHeader->getBodyAsString();
}
return new SendEmailRequest($request);
}

View File

@ -77,6 +77,11 @@ class SesHttpTransport extends AbstractHttpTransport
$request['body']['ConfigurationSetName'] = $configurationSetHeader->getBodyAsString();
}
if ($message->getOriginalMessage() instanceof Message
&& $sourceArnHeader = $message->getOriginalMessage()->getHeaders()->get('X-SES-SOURCE-ARN')) {
$request['body']['FromEmailAddressIdentityArn'] = $sourceArnHeader->getBodyAsString();
}
$response = $this->client->request('POST', 'https://'.$this->getEndpoint(), $request);
$result = new \SimpleXMLElement($response->getContent(false));

View File

@ -5,6 +5,7 @@ CHANGELOG
---
* added the `mailer` monolog channel and set it on all transport definitions
* Add support for `X-SES-SOURCE-ARN` in `symfony/amazon-mailer`
5.2.0
-----