From 2b6c459c559646ef19eaba8c6241749a21a1829a Mon Sep 17 00:00:00 2001 From: MrYamous Date: Sat, 14 Sep 2024 13:41:28 +0200 Subject: [PATCH] [Mailer] Support region in sendgrid bridge --- .../Component/Mailer/Bridge/Sendgrid/CHANGELOG.md | 5 +++++ src/Symfony/Component/Mailer/Bridge/Sendgrid/README.md | 6 +++--- .../Tests/Transport/SendgridApiTransportTest.php | 4 ++++ .../Tests/Transport/SendgridTransportFactoryTest.php | 10 ++++++++-- .../Bridge/Sendgrid/Transport/SendgridApiTransport.php | 10 ++++++++-- .../Sendgrid/Transport/SendgridSmtpTransport.php | 4 ++-- .../Sendgrid/Transport/SendgridTransportFactory.php | 5 +++-- 7 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/CHANGELOG.md b/src/Symfony/Component/Mailer/Bridge/Sendgrid/CHANGELOG.md index 67c32a2d7ebd4..4a068489286f3 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/CHANGELOG.md +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +7.2 +--- + + * Add support for region in DSN + 6.4 --- diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/README.md b/src/Symfony/Component/Mailer/Bridge/Sendgrid/README.md index a059eb4e90ed5..8f97d4ea08bd5 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/README.md +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/README.md @@ -7,15 +7,15 @@ Configuration example: ```env # SMTP -MAILER_DSN=sendgrid+smtp://KEY@default +MAILER_DSN=sendgrid+smtp://KEY@default?region=REGION # API -MAILER_DSN=sendgrid+api://KEY@default +MAILER_DSN=sendgrid+api://KEY@default?region=REGION ``` where: - `KEY` is your Sendgrid API Key - + - `REGION` is Sendgrid selected region (default to global) Webhook ------- diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php index 4196d0897172f..37dd4598cbaeb 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridApiTransportTest.php @@ -39,6 +39,10 @@ public static function getTransportData() new SendgridApiTransport('KEY'), 'sendgrid+api://api.sendgrid.com', ], + [ + new SendgridApiTransport('KEY', null, null, null, 'eu'), + 'sendgrid+api://api.eu.sendgrid.com', + ], [ (new SendgridApiTransport('KEY'))->setHost('example.com'), 'sendgrid+api://example.com', diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridTransportFactoryTest.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridTransportFactoryTest.php index 433e905add6c5..b41d23941b380 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Tests/Transport/SendgridTransportFactoryTest.php @@ -57,16 +57,22 @@ public static function supportsProvider(): iterable public static function createProvider(): iterable { + $client = new MockHttpClient(); $logger = new NullLogger(); yield [ new Dsn('sendgrid+api', 'default', self::USER), - new SendgridApiTransport(self::USER, new MockHttpClient(), null, $logger), + new SendgridApiTransport(self::USER, $client, null, $logger), + ]; + + yield [ + new Dsn('sendgrid+api', 'default', self::USER, '', null, ['region' => 'eu']), + new SendgridApiTransport(self::USER, $client, null, $logger, 'eu'), ]; yield [ new Dsn('sendgrid+api', 'example.com', self::USER, '', 8080), - (new SendgridApiTransport(self::USER, new MockHttpClient(), null, $logger))->setHost('example.com')->setPort(8080), + (new SendgridApiTransport(self::USER, $client, null, $logger))->setHost('example.com')->setPort(8080), ]; yield [ diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php index 422b942cd217f..5e4214e8c5429 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridApiTransport.php @@ -32,13 +32,14 @@ */ class SendgridApiTransport extends AbstractApiTransport { - private const HOST = 'api.sendgrid.com'; + private const HOST = 'api.%region_dot%sendgrid.com'; public function __construct( #[\SensitiveParameter] private string $key, ?HttpClientInterface $client = null, ?EventDispatcherInterface $dispatcher = null, ?LoggerInterface $logger = null, + private ?string $region = null ) { parent::__construct($client, $dispatcher, $logger); } @@ -190,6 +191,11 @@ private function getAttachments(Email $email): array private function getEndpoint(): ?string { - return ($this->host ?: self::HOST).($this->port ? ':'.$this->port : ''); + $host = $this->host ?: str_replace('%region_dot%', '', self::HOST); + if (null !== $this->region && null === $this->host) { + $host = str_replace('%region_dot%', $this->region.'.', self::HOST); + } + + return $host.($this->port ? ':'.$this->port : ''); } } diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridSmtpTransport.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridSmtpTransport.php index 647e202fa0073..d939359ff8bc0 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridSmtpTransport.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridSmtpTransport.php @@ -20,9 +20,9 @@ */ class SendgridSmtpTransport extends EsmtpTransport { - public function __construct(#[\SensitiveParameter] string $key, ?EventDispatcherInterface $dispatcher = null, ?LoggerInterface $logger = null) + public function __construct(#[\SensitiveParameter] string $key, ?EventDispatcherInterface $dispatcher = null, ?LoggerInterface $logger = null, private ?string $region = null) { - parent::__construct('smtp.sendgrid.net', 465, true, $dispatcher, $logger); + parent::__construct('null' !== $region ? \sprintf('smtp.%s.sendgrid.net', $region) : 'smtp.sendgrid.net', 465, true, $dispatcher, $logger); $this->setUsername('apikey'); $this->setPassword($key); diff --git a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridTransportFactory.php b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridTransportFactory.php index 22f56cbc857c6..1405538ab36ba 100644 --- a/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridTransportFactory.php +++ b/src/Symfony/Component/Mailer/Bridge/Sendgrid/Transport/SendgridTransportFactory.php @@ -25,16 +25,17 @@ public function create(Dsn $dsn): TransportInterface { $scheme = $dsn->getScheme(); $key = $this->getUser($dsn); + $region = $dsn->getOption('region'); if ('sendgrid+api' === $scheme) { $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); $port = $dsn->getPort(); - return (new SendgridApiTransport($key, $this->client, $this->dispatcher, $this->logger))->setHost($host)->setPort($port); + return (new SendgridApiTransport($key, $this->client, $this->dispatcher, $this->logger, $region))->setHost($host)->setPort($port); } if ('sendgrid+smtp' === $scheme || 'sendgrid+smtps' === $scheme || 'sendgrid' === $scheme) { - return new SendgridSmtpTransport($key, $this->dispatcher, $this->logger); + return new SendgridSmtpTransport($key, $this->dispatcher, $this->logger, $region); } throw new UnsupportedSchemeException($dsn, 'sendgrid', $this->getSupportedSchemes()); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy