From c7589de1bc4cf443c4be3782b2b78225998a7bbd Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Tue, 18 Jun 2024 15:40:17 +0200 Subject: [PATCH 1/2] feat: allow custom mailer now it is possible to configure custom mailer via config $CONFIG = [ 'custom_mailer_class' => 'OCA\\MyMailer\\Mail\\Mailer', ]; Signed-off-by: Misha M.-Kupriyanov --- lib/private/Server.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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), From 71e8dbf50e7b6d202300d083e00c4736a31b78bf Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Wed, 19 Jun 2024 10:54:51 +0200 Subject: [PATCH 2/2] WIP feat: allow custom mailer - adding tests Signed-off-by: Misha M.-Kupriyanov --- tests/lib/Mail/FakeMailer.php | 48 +++++++++++++++++++++++++++++++++++ tests/lib/ServerTest.php | 20 +++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 tests/lib/Mail/FakeMailer.php 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'); + } }