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());
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: