From 4b854da73efb9f5dd1424c31f511077fd70a37c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Fontaine?= Date: Wed, 8 Jan 2020 15:51:09 +0100 Subject: [PATCH] [Mailer] add ability to disable the TLS peer verification via DSN --- src/Symfony/Component/Mailer/CHANGELOG.md | 1 + .../Transport/Smtp/EsmtpTransportFactoryTest.php | 14 ++++++++++++++ .../Transport/Smtp/EsmtpTransportFactory.php | 12 ++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/Symfony/Component/Mailer/CHANGELOG.md b/src/Symfony/Component/Mailer/CHANGELOG.md index 051984f001..1049bdd1a0 100644 --- a/src/Symfony/Component/Mailer/CHANGELOG.md +++ b/src/Symfony/Component/Mailer/CHANGELOG.md @@ -36,6 +36,7 @@ CHANGELOG * Added `Symfony\Component\Mailer\Test\TransportFactoryTestCase` to ease testing custom transport factories. * Added `SentMessage::getDebug()` and `TransportExceptionInterface::getDebug` to help debugging * Made `MessageEvent` final + * add DSN parameter `verify_peer` to disable TLS peer verification for SMTP transport 4.3.0 ----- diff --git a/src/Symfony/Component/Mailer/Tests/Transport/Smtp/EsmtpTransportFactoryTest.php b/src/Symfony/Component/Mailer/Tests/Transport/Smtp/EsmtpTransportFactoryTest.php index 7dcea33e96..cd410f89cc 100644 --- a/src/Symfony/Component/Mailer/Tests/Transport/Smtp/EsmtpTransportFactoryTest.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/Smtp/EsmtpTransportFactoryTest.php @@ -6,6 +6,7 @@ use Symfony\Component\Mailer\Test\TransportFactoryTestCase; use Symfony\Component\Mailer\Transport\Dsn; use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport; use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransportFactory; +use Symfony\Component\Mailer\Transport\Smtp\Stream\SocketStream; use Symfony\Component\Mailer\Transport\TransportFactoryInterface; class EsmtpTransportFactoryTest extends TransportFactoryTestCase @@ -67,5 +68,18 @@ class EsmtpTransportFactoryTest extends TransportFactoryTestCase new Dsn('smtps', 'example.com', '', '', 465), $transport, ]; + + $transport = new EsmtpTransport('example.com', 465, true, $eventDispatcher, $logger); + /** @var SocketStream $stream */ + $stream = $transport->getStream(); + $streamOptions = $stream->getStreamOptions(); + $streamOptions['ssl']['verify_peer'] = false; + $streamOptions['ssl']['verify_peer_name'] = false; + $stream->setStreamOptions($streamOptions); + + yield [ + new Dsn('smtps', 'example.com', '', '', 465, ['verify_peer' => false]), + $transport, + ]; } } diff --git a/src/Symfony/Component/Mailer/Transport/Smtp/EsmtpTransportFactory.php b/src/Symfony/Component/Mailer/Transport/Smtp/EsmtpTransportFactory.php index 6613145f68..e09963652b 100644 --- a/src/Symfony/Component/Mailer/Transport/Smtp/EsmtpTransportFactory.php +++ b/src/Symfony/Component/Mailer/Transport/Smtp/EsmtpTransportFactory.php @@ -13,6 +13,7 @@ namespace Symfony\Component\Mailer\Transport\Smtp; use Symfony\Component\Mailer\Transport\AbstractTransportFactory; use Symfony\Component\Mailer\Transport\Dsn; +use Symfony\Component\Mailer\Transport\Smtp\Stream\SocketStream; use Symfony\Component\Mailer\Transport\TransportInterface; /** @@ -28,6 +29,17 @@ final class EsmtpTransportFactory extends AbstractTransportFactory $transport = new EsmtpTransport($host, $port, $tls, $this->dispatcher, $this->logger); + if (!$dsn->getOption('verify_peer', true)) { + /** @var SocketStream $stream */ + $stream = $transport->getStream(); + $streamOptions = $stream->getStreamOptions(); + + $streamOptions['ssl']['verify_peer'] = false; + $streamOptions['ssl']['verify_peer_name'] = false; + + $stream->setStreamOptions($streamOptions); + } + if ($user = $dsn->getUser()) { $transport->setUsername($user); }