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 a1b0ae7f1a81e..b6061f03cd3e6 100644 --- a/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Amazon/Tests/Transport/SesApiTransportTest.php @@ -12,7 +12,12 @@ namespace Symfony\Component\Mailer\Bridge\Amazon\Tests\Transport; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpClient\MockHttpClient; +use Symfony\Component\HttpClient\Response\MockResponse; use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesApiTransport; +use Symfony\Component\Mailer\Envelope; +use Symfony\Component\Mime\Address; +use Symfony\Component\Mime\Email; class SesApiTransportTest extends TestCase { @@ -45,4 +50,83 @@ public function getTransportData() ], ]; } + + public function testSendEmail() + { + $awsApiCallback = function ($method, $url, $options) { + $requestParts = []; + parse_str($options['body'], $requestParts); + + $this->assertEquals('POST', $method); + $this->assertEquals('https://email.eu-west-1.amazonaws.com/', $url); + + $this->assertEquals($requestParts['Source'], 'sender@example.tld'); + $this->assertArrayNotHasKey('Destinations.member', $requestParts); + + return new MockResponse($this->createMockAwsSendRawEmailResponse()); + }; + + $httpClient = new MockHttpClient($awsApiCallback); + $transport = new SesApiTransport('ACCESS_KEY', 'SECRET_KEY', 'eu-west-1', $httpClient); + + $email = (new Email()) + ->from('sender@example.tld') + ->to('recipient-to@example.tld') + ->subject('Test Mail') + ->text('Text content of the test mail') + ->html('
HTML content of the test mail
'); + + $transport->send($email); + } + + public function testSendEmailWithEnvelopeOverride() + { + $awsApiCallback = function ($method, $url, $options) { + $requestParts = []; + parse_str($options['body'], $requestParts); + + $this->assertEquals('POST', $method); + $this->assertEquals('https://email.eu-west-1.amazonaws.com/', $url); + + $this->assertEquals($requestParts['Source'], 'envelope-sender@example.tld'); + $this->assertArrayHasKey('Destinations_member', $requestParts); + $this->assertEquals($requestParts['Destinations_member'], [ + 'envelope-recipient-1@example.tld', + 'envelope-recipient-2@example.tld', + ]); + + return new MockResponse($this->createMockAwsSendRawEmailResponse()); + }; + + $httpClient = new MockHttpClient($awsApiCallback); + $transport = new SesApiTransport('ACCESS_KEY', 'SECRET_KEY', 'eu-west-1', $httpClient); + + $email = (new Email()) + ->from('sender@example.tld') + ->to('recipient-to@example.tld') + ->subject('Test Mail') + ->text('Text content of the test mail') + ->html('HTML content of the test mail
'); + + $envelope = new Envelope(Address::create('envelope-sender@example.tld'), [ + Address::create('envelope-recipient-1@example.tld'), + Address::create('envelope-recipient-2@example.tld'), + ]); + + $transport->send($email, $envelope); + } + + private function createMockAwsSendRawEmailResponse(): string + { + return <<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: