Mail: Updated to forked symfony/mailer to allow assurance of tls

Related to #4358
This commit is contained in:
Dan Brown 2023-07-04 15:21:31 +01:00
parent 80635144b1
commit 465989efa9
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
4 changed files with 109 additions and 113 deletions

View File

@ -31,7 +31,7 @@ return [
'mailers' => [ 'mailers' => [
'smtp' => [ 'smtp' => [
'transport' => 'smtp', 'transport' => 'smtp',
'scheme' => ($mailEncryption === 'tls' || $mailEncryption === 'ssl') ? 'smtps' : null, 'scheme' => null,
'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587), 'port' => env('MAIL_PORT', 587),
'username' => env('MAIL_USERNAME'), 'username' => env('MAIL_USERNAME'),
@ -39,6 +39,7 @@ return [
'verify_peer' => env('MAIL_VERIFY_SSL', true), 'verify_peer' => env('MAIL_VERIFY_SSL', true),
'timeout' => null, 'timeout' => null,
'local_domain' => env('MAIL_EHLO_DOMAIN'), 'local_domain' => env('MAIL_EHLO_DOMAIN'),
'tls_required' => ($mailEncryption === 'tls' || $mailEncryption === 'ssl'),
], ],
'sendmail' => [ 'sendmail' => [

View File

@ -49,7 +49,8 @@
"nunomaduro/larastan": "^2.4", "nunomaduro/larastan": "^2.4",
"phpunit/phpunit": "^9.5", "phpunit/phpunit": "^9.5",
"squizlabs/php_codesniffer": "^3.7", "squizlabs/php_codesniffer": "^3.7",
"ssddanbrown/asserthtml": "^2.0" "ssddanbrown/asserthtml": "^2.0",
"ssddanbrown/symfony-mailer": "6.0.x-dev"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {

190
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "5a066407dfbd1809ffd39114a873333d", "content-hash": "d010cf625b58a0dc43addda7881ea42f",
"packages": [ "packages": [
{ {
"name": "aws/aws-crt-php", "name": "aws/aws-crt-php",
@ -1945,16 +1945,16 @@
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v9.52.9", "version": "v9.52.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "c512ece7b1ee393eac5893f37cb2b029a5413b97" "reference": "858add225ce88a76c43aec0e7866288321ee0ee9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/c512ece7b1ee393eac5893f37cb2b029a5413b97", "url": "https://api.github.com/repos/laravel/framework/zipball/858add225ce88a76c43aec0e7866288321ee0ee9",
"reference": "c512ece7b1ee393eac5893f37cb2b029a5413b97", "reference": "858add225ce88a76c43aec0e7866288321ee0ee9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2139,7 +2139,7 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2023-06-08T20:06:23+00:00" "time": "2023-06-27T13:25:54+00:00"
}, },
{ {
"name": "laravel/serializable-closure", "name": "laravel/serializable-closure",
@ -3264,16 +3264,16 @@
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "2.67.0", "version": "2.68.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/briannesbitt/Carbon.git", "url": "https://github.com/briannesbitt/Carbon.git",
"reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8" "reference": "4f991ed2a403c85efbc4f23eb4030063fdbe01da"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/c1001b3bc75039b07f38a79db5237c4c529e04c8", "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4f991ed2a403c85efbc4f23eb4030063fdbe01da",
"reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8", "reference": "4f991ed2a403c85efbc4f23eb4030063fdbe01da",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3362,7 +3362,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-05-25T22:09:47+00:00" "time": "2023-06-20T18:29:04+00:00"
}, },
{ {
"name": "nette/schema", "name": "nette/schema",
@ -3515,16 +3515,16 @@
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
"version": "v4.15.5", "version": "v4.16.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nikic/PHP-Parser.git", "url": "https://github.com/nikic/PHP-Parser.git",
"reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e" "reference": "19526a33fb561ef417e822e85f08a00db4059c17"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/11e2663a5bc9db5d714eedb4277ee300403b4a9e", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/19526a33fb561ef417e822e85f08a00db4059c17",
"reference": "11e2663a5bc9db5d714eedb4277ee300403b4a9e", "reference": "19526a33fb561ef417e822e85f08a00db4059c17",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3565,9 +3565,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/nikic/PHP-Parser/issues", "issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.5" "source": "https://github.com/nikic/PHP-Parser/tree/v4.16.0"
}, },
"time": "2023-05-19T20:20:00+00:00" "time": "2023-06-25T14:52:30+00:00"
}, },
{ {
"name": "nunomaduro/termwind", "name": "nunomaduro/termwind",
@ -5427,6 +5427,74 @@
], ],
"time": "2022-01-24T20:12:20+00:00" "time": "2022-01-24T20:12:20+00:00"
}, },
{
"name": "ssddanbrown/symfony-mailer",
"version": "6.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/ssddanbrown/symfony-mailer.git",
"reference": "2219dcdc5f58e4f382ce8f1e6942d16982aa3012"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ssddanbrown/symfony-mailer/zipball/2219dcdc5f58e4f382ce8f1e6942d16982aa3012",
"reference": "2219dcdc5f58e4f382ce8f1e6942d16982aa3012",
"shasum": ""
},
"require": {
"egulias/email-validator": "^2.1.10|^3|^4",
"php": ">=8.0.2",
"psr/event-dispatcher": "^1",
"psr/log": "^1|^2|^3",
"symfony/event-dispatcher": "^5.4|^6.0",
"symfony/mime": "^5.4|^6.0",
"symfony/service-contracts": "^1.1|^2|^3"
},
"conflict": {
"symfony/http-kernel": "<5.4"
},
"replace": {
"symfony/mailer": "^6.0"
},
"require-dev": {
"symfony/http-client-contracts": "^1.1|^2|^3",
"symfony/messenger": "^5.4|^6.0"
},
"default-branch": true,
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Mailer\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Dan Brown",
"homepage": "https://danb.me"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/ssddanbrown/symfony-mailer/tree/6.0"
},
"time": "2023-07-04T14:10:33+00:00"
},
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v6.0.19", "version": "v6.0.19",
@ -6132,80 +6200,6 @@
], ],
"time": "2023-02-01T08:22:55+00:00" "time": "2023-02-01T08:22:55+00:00"
}, },
{
"name": "symfony/mailer",
"version": "v6.0.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
"reference": "cd60799210c488f545ddde2444dc1aa548322872"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mailer/zipball/cd60799210c488f545ddde2444dc1aa548322872",
"reference": "cd60799210c488f545ddde2444dc1aa548322872",
"shasum": ""
},
"require": {
"egulias/email-validator": "^2.1.10|^3|^4",
"php": ">=8.0.2",
"psr/event-dispatcher": "^1",
"psr/log": "^1|^2|^3",
"symfony/event-dispatcher": "^5.4|^6.0",
"symfony/mime": "^5.4|^6.0",
"symfony/service-contracts": "^1.1|^2|^3"
},
"conflict": {
"symfony/http-kernel": "<5.4"
},
"require-dev": {
"symfony/http-client-contracts": "^1.1|^2|^3",
"symfony/messenger": "^5.4|^6.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Mailer\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/mailer/tree/v6.0.19"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2023-01-11T11:50:03+00:00"
},
{ {
"name": "symfony/mime", "name": "symfony/mime",
"version": "v6.0.19", "version": "v6.0.19",
@ -8796,16 +8790,16 @@
}, },
{ {
"name": "phpstan/phpstan", "name": "phpstan/phpstan",
"version": "1.10.21", "version": "1.10.23",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan.git", "url": "https://github.com/phpstan/phpstan.git",
"reference": "b2a30186be2e4d97dce754ae4e65eb0ec2f04eb5" "reference": "65ab678d1248a8bc6fde456f0d7ff3562a61a4cd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/b2a30186be2e4d97dce754ae4e65eb0ec2f04eb5", "url": "https://api.github.com/repos/phpstan/phpstan/zipball/65ab678d1248a8bc6fde456f0d7ff3562a61a4cd",
"reference": "b2a30186be2e4d97dce754ae4e65eb0ec2f04eb5", "reference": "65ab678d1248a8bc6fde456f0d7ff3562a61a4cd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8854,7 +8848,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-06-21T20:07:58+00:00" "time": "2023-07-04T13:32:44+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
@ -10480,7 +10474,9 @@
], ],
"aliases": [], "aliases": [],
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": [], "stability-flags": {
"ssddanbrown/symfony-mailer": 20
},
"prefer-stable": true, "prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {

View File

@ -5,7 +5,6 @@ namespace Tests\Unit;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport; use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
use Symfony\Component\Mailer\Transport\Smtp\Stream\SocketStream;
use Tests\TestCase; use Tests\TestCase;
/** /**
@ -125,41 +124,40 @@ class ConfigTest extends TestCase
public function test_non_null_mail_encryption_options_enforce_smtp_scheme() public function test_non_null_mail_encryption_options_enforce_smtp_scheme()
{ {
$this->checkEnvConfigResult('MAIL_ENCRYPTION', 'tls', 'mail.mailers.smtp.scheme', 'smtps'); $this->checkEnvConfigResult('MAIL_ENCRYPTION', 'tls', 'mail.mailers.smtp.tls_required', true);
$this->checkEnvConfigResult('MAIL_ENCRYPTION', 'ssl', 'mail.mailers.smtp.scheme', 'smtps'); $this->checkEnvConfigResult('MAIL_ENCRYPTION', 'ssl', 'mail.mailers.smtp.tls_required', true);
$this->checkEnvConfigResult('MAIL_ENCRYPTION', 'null', 'mail.mailers.smtp.scheme', null); $this->checkEnvConfigResult('MAIL_ENCRYPTION', 'null', 'mail.mailers.smtp.tls_required', false);
} }
public function test_smtp_scheme_and_certain_port_forces_tls_usage() public function test_smtp_scheme_and_certain_port_forces_tls_usage()
{ {
$isMailTlsForcedEnabled = function () { $isMailTlsRequired = function () {
/** @var \BookStack\App\Mail\EsmtpTransport $transport */
$transport = Mail::mailer('smtp')->getSymfonyTransport(); $transport = Mail::mailer('smtp')->getSymfonyTransport();
/** @var SocketStream $stream */
$stream = $transport->getStream();
Mail::purge('smtp'); Mail::purge('smtp');
return $stream->isTLS(); return $transport->getTlsRequirement();
}; };
config()->set([ config()->set([
'mail.mailers.smtp.scheme' => null, 'mail.mailers.smtp.tls_required' => null,
'mail.mailers.smtp.port' => 587, 'mail.mailers.smtp.port' => 587,
]); ]);
$this->assertFalse($isMailTlsForcedEnabled()); $this->assertFalse($isMailTlsRequired());
config()->set([ config()->set([
'mail.mailers.smtp.scheme' => 'smtps', 'mail.mailers.smtp.tls_required' => 'tls',
'mail.mailers.smtp.port' => 587, 'mail.mailers.smtp.port' => 587,
]); ]);
$this->assertTrue($isMailTlsForcedEnabled()); $this->assertTrue($isMailTlsRequired());
config()->set([ config()->set([
'mail.mailers.smtp.scheme' => '', 'mail.mailers.smtp.tls_required' => null,
'mail.mailers.smtp.port' => 465, 'mail.mailers.smtp.port' => 465,
]); ]);
$this->assertTrue($isMailTlsForcedEnabled()); $this->assertTrue($isMailTlsRequired());
} }
/** /**