diff --git a/lib/private/Server.php b/lib/private/Server.php index be9d7595e4221..179e1c3a58b42 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -931,6 +931,21 @@ public function __construct($webRoot, \OC\Config $config) { }); $this->registerService(IMailer::class, function (Server $c) { + $config = $c->get(\OCP\IConfig::class); + $mailerClass = $config->getSystemValueString('custom_mailer_class', ''); + + if ($mailerClass !== '' && class_exists($mailerClass) && in_array(IMailer::class, class_implements($mailerClass), true)) { + return new $mailerClass( + $c->get(\OCP\IConfig::class), + $c->get(LoggerInterface::class), + $c->get(Defaults::class), + $c->get(IURLGenerator::class), + $c->getL10N('lib'), + $c->get(IEventDispatcher::class), + $c->get(IFactory::class) + ); + } + return new Mailer( $c->get(\OCP\IConfig::class), $c->get(LoggerInterface::class), diff --git a/tests/lib/Mail/FakeMailer.php b/tests/lib/Mail/FakeMailer.php new file mode 100644 index 0000000000000..b211b07f18671 --- /dev/null +++ b/tests/lib/Mail/FakeMailer.php @@ -0,0 +1,48 @@ +setSystemValue('comments.managerFactory', $defaultManagerFactory); } + + public function testOverwriteDefaultMailer() { + $config = $this->server->getConfig(); + $config->deleteSystemValue('custom_mailer_class'); + + $this->assertEquals('not_set', $config->getSystemValue('custom_mailer_class', 'not_set'), "custom_mailer_class is not set"); + + $serviceName = 'Mailer'; + $instanceOf = '\OC\Mail\Mailer'; + + $this->assertInstanceOf($instanceOf, $this->server->query($serviceName), 'Service "' . $serviceName . '"" did not return the right class'); + // $this->assertInstanceOf($instanceOf, $this->server->query($serviceName), 'Service "' . $serviceName . '"" did not return the right class. serviceName=' . $serviceName); + + $instanceOf = 'Test\\Mail\\FakeMailer'; + $config->setSystemValue('custom_mailer_class', 'Test\\Mail\\FakeMailer'); + + $this->assertInstanceOf($instanceOf, $this->server->query($serviceName), 'Service "' . $serviceName . '"" did not return the right class'); + + $config->deleteSystemValue('custom_mailer_class'); + } }