diff --git a/manager-bundle/composer.json b/manager-bundle/composer.json index d3055e7361b..57858a8d045 100644 --- a/manager-bundle/composer.json +++ b/manager-bundle/composer.json @@ -50,7 +50,7 @@ "symfony/routing": "4.4.*", "symfony/security-bundle": "4.4.*", "symfony/stopwatch": "4.4.*", - "symfony/swiftmailer-bundle": "^2.6.2 || ^3.1.5", + "symfony/swiftmailer-bundle": "^3.2.8", "symfony/twig-bundle": "4.4.*", "symfony/web-profiler-bundle": "4.4.*", "symfony/yaml": "4.4.*", diff --git a/manager-bundle/src/ContaoManager/Plugin.php b/manager-bundle/src/ContaoManager/Plugin.php index 0480f72368b..bf2ca173c23 100644 --- a/manager-bundle/src/ContaoManager/Plugin.php +++ b/manager-bundle/src/ContaoManager/Plugin.php @@ -245,6 +245,7 @@ public function getExtensionConfig($extensionName, array $extensionConfigs, Plug case 'swiftmailer': $extensionConfigs = $this->checkMailerTransport($extensionConfigs, $container); + $extensionConfigs = $this->setSendmailCommand($extensionConfigs); if (!isset($_SERVER['MAILER_URL'])) { $container->setParameter('env(MAILER_URL)', $this->getMailerUrl($container)); @@ -372,6 +373,30 @@ private function getDatabaseUrl(ContainerBuilder $container): string ); } + /** + * Sets the sendmail command for Swiftmailer to the sendmail_path defined by PHP. + * + * @return array>>> + */ + private function setSendmailCommand(array $extensionConfigs): array + { + $sendmailPath = @ini_get('sendmail_path'); + + if (!$sendmailPath) { + return $extensionConfigs; + } + + foreach ($extensionConfigs as $extensionConfig) { + if (isset($extensionConfig['command']) || isset($extensionConfig['mailers']['default']['command'])) { + return $extensionConfigs; + } + } + + $extensionConfigs[] = ['command' => $sendmailPath]; + + return $extensionConfigs; + } + private function getMailerUrl(ContainerBuilder $container): string { if ('sendmail' === $container->getParameter('mailer_transport')) { diff --git a/manager-bundle/tests/ContaoManager/PluginTest.php b/manager-bundle/tests/ContaoManager/PluginTest.php index 023c27fd27f..c25ecf1496c 100644 --- a/manager-bundle/tests/ContaoManager/PluginTest.php +++ b/manager-bundle/tests/ContaoManager/PluginTest.php @@ -570,6 +570,46 @@ public function getMailerParameters(): \Generator ]; } + public function testSetsTheSendmailCommand(): void + { + $container = $this->getContainer(); + + $extensionConfig = (new Plugin())->getExtensionConfig('swiftmailer', [], $container); + + $this->assertTrue(!ini_get('sendmail_path') || isset($extensionConfig[0]['command'])); + } + + public function testDoesNotSetTheSendmailCommandIfAlreadyDefined(): void + { + $container = $this->getContainer(); + + $extensionConfigs = [[ + 'command' => '/foobar/sendmail -t', + ]]; + + $expect = $extensionConfigs; + + $extensionConfig = (new Plugin())->getExtensionConfig('swiftmailer', $extensionConfigs, $container); + + $this->assertSame($expect, $extensionConfig); + + $extensionConfigs = [ + [ + 'mailers' => [ + 'default' => [ + 'command' => '/foobar/sendmail -t', + ], + ], + ], + ]; + + $expect = $extensionConfigs; + + $extensionConfig = (new Plugin())->getExtensionConfig('swiftmailer', $extensionConfigs, $container); + + $this->assertSame($expect, $extensionConfig); + } + public function testRetrievesTheConnectionParametersFromTheConfiguration(): void { $pluginLoader = $this->createMock(PluginLoader::class);