Hi everyone
I would like to override 2 automatics email sent by Nextcloud :
- When I create an user
- When I share a file or folder with an user (not by email address).
I wrote this code :
<?php
namespace OCA\MailerWrapper\Mail;
use OC\Mail\EMailTemplate as ParentTemplate;
use OCP\Defaults;
use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\L10N\IFactory;
class EMailTemplate extends ParentTemplate {
protected string $plainBodyAddUser = <<<EOF
Welcome.
EOF;
protected string $bodyTextAddUser = <<<EOF
body
EOF;
protected string $footerTextAddUser = <<<EOF
footer
EOF;
public function __construct(
protected Defaults $themingDefaults,
protected IURLGenerator $urlGenerator,
protected IFactory $l10nFactory,
protected string $emailId,
protected array $data,
// protected string $message
private IUserManager $userManager
)
{
parent::__construct(
$themingDefaults,
$urlGenerator,
$l10nFactory,
$emailId,
$data
);
}
public function addHeading(string $title, $plainTitle = ''): void
{
if ($this->emailId === 'settings.Welcome') {
parent::addHeading($this->plainBodyAddUser);
return;
}
parent::addHeading($title, $plainTitle);
}
public function addBodyText(string $text, $plainText = ''): void {
if ($this->emailId === 'settings.Welcome') {
if (str_starts_with($text, 'Your username')) {
$uid = explode(':', $text)[1];
// $user = $this->userManager->get($uid);
parent::addBodyText(
sprintf(
'Account user name %s',
$uid
)
);
return;
}
parent::addBodyText($this->bodyTextAddUser);
return;
}
if ($this->emailId === 'files_sharing.RecipientNotification') {
parent::addBodyText(
'body sharing 1'
);
parent::addBodyText(
'body sharing 2'
);
parent::addBodyText('body sharing 3');
return;
}
// default email
parent::addBodyText($text, $plainText);
}
public function addFooter(string $text = '', ?string $lang = null): void {
if ($this->emailId === 'settings.Welcome') {
parent::addFooter($this->footerTextAddUser);
return;
}
if ($this->emailId === 'files_sharing.RecipientNotification') {
parent::addFooter('footer sharing');
return;
}
// default email
parent::addBodyText($text, $lang);
}
}
In the constructor from my EMailTemplate class, I added the IUserManager
interface to add the email address of the user created.
But, when I created the user, I get an issue :
In the response tab :
<?xml version="1.0"?>
<ocs>
<meta>
<status>failure</status>
<statuscode>500</statuscode>
<message>Internal Server Error
Too few arguments to function OCA\MailerWrapper\Mail\EMailTemplate::__construct(), 5 passed in /var/www/html/lib/private/Mail/Mailer.php on line 130 and exactly 6 expected in file '/var/www/html/apps-extra/mailerwrapper/lib/Mail/EMailTemplate.php' line 32</message>
</meta>
<data/>
</ocs>
But, I donβt understand, I sent to parent all variables to construct it :
parent::__construct(
$themingDefaults,
$urlGenerator,
$l10nFactory,
$emailId,
$data
);
So, why I cannot add the IUserManager interface to custom my emails ?