From 9b338a4c5d1d1319ec03fc12a0058734d4fb9433 Mon Sep 17 00:00:00 2001 From: alustau Date: Fri, 28 May 2021 17:25:45 +0200 Subject: [PATCH] Allow multiple SES configuration with IAM Role authentication Co-authored-by: Marco Deleu --- src/Illuminate/Mail/MailManager.php | 10 +++--- tests/Mail/MailSesTransportTest.php | 53 +++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/Illuminate/Mail/MailManager.php b/src/Illuminate/Mail/MailManager.php index 036a0d3c00ec..10ee6eded06c 100644 --- a/src/Illuminate/Mail/MailManager.php +++ b/src/Illuminate/Mail/MailManager.php @@ -262,11 +262,11 @@ protected function createSendmailTransport(array $config) */ protected function createSesTransport(array $config) { - if (! isset($config['secret'])) { - $config = array_merge($this->app['config']->get('services.ses', []), [ - 'version' => 'latest', 'service' => 'email', - ]); - } + $global = $this->app['config']->get('services.ses', []); + + $default = ['version' => 'latest', 'service' => 'email']; + + $config = array_merge($global, $default, $config); $config = Arr::except($config, ['transport']); diff --git a/tests/Mail/MailSesTransportTest.php b/tests/Mail/MailSesTransportTest.php index 5d1d8f1fe885..ee2d4d35b826 100644 --- a/tests/Mail/MailSesTransportTest.php +++ b/tests/Mail/MailSesTransportTest.php @@ -8,6 +8,7 @@ use Illuminate\Mail\MailManager; use Illuminate\Mail\Transport\SesTransport; use Illuminate\Support\Str; +use Illuminate\View\Factory; use PHPUnit\Framework\TestCase; use Swift_Message; @@ -68,6 +69,58 @@ public function testSend() $this->assertEquals($messageId, $message->getHeaders()->get('X-Message-ID')->getFieldBody()); $this->assertEquals($messageId, $message->getHeaders()->get('X-SES-Message-ID')->getFieldBody()); } + + public function testSesLocalConfiguration() + { + $container = new Container; + + $container->singleton('config', function () { + return new Repository([ + 'mail' => [ + 'mailers' => [ + 'ses' => [ + 'transport' => 'ses', + 'region' => 'eu-west-1', + 'options' => [ + 'ConfigurationSetName' => 'Laravel', + 'Tags' => [ + ['Name' => 'Laravel', 'Value' => 'Framework'], + ], + ], + ], + ], + ], + 'services' => [ + 'ses' => [ + 'region' => 'us-east-1', + ], + ], + ]); + }); + + $container->instance('view', $this->createMock(Factory::class)); + + $container->bind('events', function () { + return null; + }); + + $manager = new MailManager($container); + + /** @var \Illuminate\Mail\Mailer $mailer */ + $mailer = $manager->mailer('ses'); + + /** @var \Illuminate\Mail\Transport\SesTransport $transport */ + $transport = $mailer->getSwiftMailer()->getTransport(); + + $this->assertSame('eu-west-1', $transport->ses()->getRegion()); + + $this->assertSame([ + 'ConfigurationSetName' => 'Laravel', + 'Tags' => [ + ['Name' => 'Laravel', 'Value' => 'Framework'], + ], + ], $transport->getOptions()); + } } class sendRawEmailMock