From d60f400ed21e5c00b7f62f8fb7f61a5ad7cab028 Mon Sep 17 00:00:00 2001 From: Michael Dawart Date: Fri, 17 Feb 2023 20:05:15 +0100 Subject: [PATCH] [Mailer] Add option to enable Sandbox via dsn option sandbox=true --- .../Mailer/Bridge/Mailjet/CHANGELOG.md | 5 ++ .../Component/Mailer/Bridge/Mailjet/README.md | 1 + .../Transport/MailjetApiTransportTest.php | 54 ++++++++++++++++++- .../Mailjet/Transport/MailjetApiTransport.php | 5 +- .../Transport/MailjetTransportFactory.php | 3 +- 5 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/CHANGELOG.md b/src/Symfony/Component/Mailer/Bridge/Mailjet/CHANGELOG.md index 0d994e934e55..8795f1e1008d 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailjet/CHANGELOG.md +++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +6.3 +--- + + * Add sandbox option + 5.2.0 ----- diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/README.md b/src/Symfony/Component/Mailer/Bridge/Mailjet/README.md index 634c674528fb..318367c2e9b8 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailjet/README.md +++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/README.md @@ -8,6 +8,7 @@ Configuration examples: ```dotenv # API MAILER_DSN=mailjet+api://$PUBLIC_KEY:$PRIVATE_KEY@default +MAILER_DSN=mailjet+api://$PUBLIC_KEY:$PRIVATE_KEY@default?sandbox=true # SMTP MAILER_DSN=mailjet+smtp://$PUBLIC_KEY:$PRIVATE_KEY@default ``` diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/Tests/Transport/MailjetApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Mailjet/Tests/Transport/MailjetApiTransportTest.php index 7a82b88800f5..93abf9415de6 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailjet/Tests/Transport/MailjetApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/Tests/Transport/MailjetApiTransportTest.php @@ -318,7 +318,6 @@ public function testHeaderToMessage() $transport = new MailjetApiTransport(self::USER, self::PASSWORD); $method = new \ReflectionMethod(MailjetApiTransport::class, 'getPayload'); - $method->setAccessible(true); self::assertSame( [ 'Messages' => [ @@ -364,6 +363,59 @@ public function testHeaderToMessage() 'TrackOpen' => 'account_default', ], ], + 'SandBoxMode' => false, + ], + $method->invoke($transport, $email, $envelope) + ); + + $transport = new MailjetApiTransport(self::USER, self::PASSWORD, sandbox: true); + $method = new \ReflectionMethod(MailjetApiTransport::class, 'getPayload'); + self::assertSame( + [ + 'Messages' => [ + [ + 'From' => [ + 'Email' => 'foo@example.com', + 'Name' => 'Foo', + ], + 'To' => [ + [ + 'Email' => 'bar@example.com', + 'Name' => '', + ], + ], + 'Subject' => 'Sending email to mailjet API', + 'Attachments' => [], + 'InlinedAttachments' => [], + 'ReplyTo' => [ + 'Email' => 'qux@example.com', + 'Name' => 'Qux', + ], + 'Headers' => [ + 'X-authorized-header' => 'authorized', + ], + 'TemplateLanguage' => true, + 'TemplateID' => 12345, + 'TemplateErrorReporting' => [ + 'Email' => 'errors@mailjet.com', + 'Name' => 'Error Email', + ], + 'TemplateErrorDeliver' => true, + 'Variables' => [ + 'varname1' => 'value1', + 'varname2' => 'value2', + 'varname3' => 'value3', + ], + 'CustomID' => 'CustomValue', + 'EventPayload' => 'Eticket,1234,row,15,seat,B', + 'CustomCampaign' => 'SendAPI_campaign', + 'DeduplicateCampaign' => true, + 'Priority' => 2, + 'TrackClick' => 'account_default', + 'TrackOpen' => 'account_default', + ], + ], + 'SandBoxMode' => true, ], $method->invoke($transport, $email, $envelope) ); diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetApiTransport.php index 2f48cd5de046..22002f36f2b0 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetApiTransport.php @@ -53,11 +53,13 @@ class MailjetApiTransport extends AbstractApiTransport private string $privateKey; private string $publicKey; + private bool $sandbox; - public function __construct(string $publicKey, string $privateKey, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null, LoggerInterface $logger = null) + public function __construct(string $publicKey, string $privateKey, HttpClientInterface $client = null, EventDispatcherInterface $dispatcher = null, LoggerInterface $logger = null, bool $sandbox = false) { $this->publicKey = $publicKey; $this->privateKey = $privateKey; + $this->sandbox = $sandbox; parent::__construct($client, $dispatcher, $logger); } @@ -153,6 +155,7 @@ private function getPayload(Email $email, Envelope $envelope): array return [ 'Messages' => [$message], + 'SandBoxMode' => $this->sandbox, ]; } diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetTransportFactory.php b/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetTransportFactory.php index 4ff2698be608..938b87d74f31 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetTransportFactory.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetTransportFactory.php @@ -24,9 +24,10 @@ public function create(Dsn $dsn): TransportInterface $user = $this->getUser($dsn); $password = $this->getPassword($dsn); $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); + $sandbox = filter_var($dsn->getOption('sandbox', false), \FILTER_VALIDATE_BOOL); if ('mailjet+api' === $scheme) { - return (new MailjetApiTransport($user, $password, $this->client, $this->dispatcher, $this->logger))->setHost($host); + return (new MailjetApiTransport($user, $password, $this->client, $this->dispatcher, $this->logger, $sandbox))->setHost($host); } if (\in_array($scheme, ['mailjet+smtp', 'mailjet+smtps', 'mailjet'])) {