diff options
-rw-r--r-- | lib/private/Mail/Attachment.php | 23 | ||||
-rw-r--r-- | lib/private/Mail/EMailTemplate.php | 135 | ||||
-rw-r--r-- | lib/private/Mail/Mailer.php | 52 | ||||
-rw-r--r-- | lib/private/Mail/Message.php | 47 |
4 files changed, 89 insertions, 168 deletions
diff --git a/lib/private/Mail/Attachment.php b/lib/private/Mail/Attachment.php index 5bfe0dd0522..7500d0b6c98 100644 --- a/lib/private/Mail/Attachment.php +++ b/lib/private/Mail/Attachment.php @@ -36,26 +36,15 @@ use Symfony\Component\Mime\Email; * @since 13.0.0 */ class Attachment implements IAttachment { - private ?string $body; - private ?string $name; - private ?string $contentType; - private ?string $path; - public function __construct( - ?string $body, - ?string $name, - ?string $contentType, - ?string $path = null + private ?string $body, + private ?string $name, + private ?string $contentType, + private ?string $path = null ) { - $this->body = $body; - $this->name = $name; - $this->contentType = $contentType; - $this->path = $path; } /** - * @param string $filename - * @return $this * @since 13.0.0 */ public function setFilename(string $filename): IAttachment { @@ -64,8 +53,6 @@ class Attachment implements IAttachment { } /** - * @param string $contentType - * @return $this * @since 13.0.0 */ public function setContentType(string $contentType): IAttachment { @@ -74,8 +61,6 @@ class Attachment implements IAttachment { } /** - * @param string $body - * @return $this * @since 13.0.0 */ public function setBody(string $body): IAttachment { diff --git a/lib/private/Mail/EMailTemplate.php b/lib/private/Mail/EMailTemplate.php index 40738623c19..bb60f761450 100644 --- a/lib/private/Mail/EMailTemplate.php +++ b/lib/private/Mail/EMailTemplate.php @@ -52,33 +52,19 @@ use OCP\Mail\IEMailTemplate; * @package OC\Mail */ class EMailTemplate implements IEMailTemplate { - /** @var Defaults */ - protected $themingDefaults; - /** @var IURLGenerator */ - protected $urlGenerator; - /** @var IFactory */ - protected $l10nFactory; - /** @var string */ - protected $emailId; - /** @var array */ - protected $data; - - /** @var string */ - protected $subject = ''; - /** @var string */ - protected $htmlBody = ''; - /** @var string */ - protected $plainBody = ''; - /** @var bool indicated if the footer is added */ - protected $headerAdded = false; - /** @var bool indicated if the body is already opened */ - protected $bodyOpened = false; - /** @var bool indicated if there is a list open in the body */ - protected $bodyListOpened = false; - /** @var bool indicated if the footer is added */ - protected $footerAdded = false; - - protected $head = <<<EOF + protected string $subject = ''; + protected string $htmlBody = ''; + protected string $plainBody = ''; + /** indicated if the header is added */ + protected bool $headerAdded = false; + /** indicated if the body is already opened */ + protected bool $bodyOpened = false; + /** indicated if there is a list open in the body */ + protected bool $bodyListOpened = false; + /** indicated if the footer is added */ + protected bool $footerAdded = false; + + protected string $head = <<<EOF <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" style="-webkit-font-smoothing:antialiased;background:#fff!important"> <head> @@ -96,7 +82,7 @@ class EMailTemplate implements IEMailTemplate { <center data-parsed="" style="min-width:580px;width:100%"> EOF; - protected $tail = <<<EOF + protected string $tail = <<<EOF </center> </td> </tr> @@ -108,7 +94,7 @@ EOF; EOF; - protected $header = <<<EOF + protected string $header = <<<EOF <table align="center" class="wrapper header float-center" style="Margin:0 auto;background:#fff;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%%"> <tr style="padding:0;text-align:left;vertical-align:top"> <td class="wrapper-inner" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:20px;text-align:left;vertical-align:top;word-wrap:break-word"> @@ -141,7 +127,7 @@ EOF; </table> EOF; - protected $heading = <<<EOF + protected string $heading = <<<EOF <table align="center" class="container main-heading float-center" style="Margin:0 auto;background:0 0!important;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:580px"> <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> @@ -160,7 +146,7 @@ EOF; </table> EOF; - protected $bodyBegin = <<<EOF + protected string $bodyBegin = <<<EOF <table align="center" class="wrapper content float-center" style="Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%"> <tr style="padding:0;text-align:left;vertical-align:top"> <td class="wrapper-inner" style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word"> @@ -170,7 +156,7 @@ EOF; <td style="-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word"> EOF; - protected $bodyText = <<<EOF + protected string $bodyText = <<<EOF <table class="row description" style="border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%%"> <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> @@ -190,7 +176,7 @@ EOF; EOF; // note: listBegin (like bodyBegin) is not processed through sprintf, so "%" is not escaped as "%%". (bug #12151) - protected $listBegin = <<<EOF + protected string $listBegin = <<<EOF <table class="row description" style="border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%"> <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> @@ -198,7 +184,7 @@ EOF; <table style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%"> EOF; - protected $listItem = <<<EOF + protected string $listItem = <<<EOF <tr style="padding:0;text-align:left;vertical-align:top"> <td style="Margin:0;color:#0a0a0a;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left;width:15px;"> <p class="text-left" style="Margin:0;Margin-bottom:10px;color:#777;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen-Sans,Ubuntu,Cantarell,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;margin-bottom:10px;padding:0;padding-left:10px;text-align:left">%s</p> @@ -210,7 +196,7 @@ EOF; </tr> EOF; - protected $listEnd = <<<EOF + protected string $listEnd = <<<EOF </table> </th> </tr> @@ -218,7 +204,7 @@ EOF; </table> EOF; - protected $buttonGroup = <<<EOF + protected string $buttonGroup = <<<EOF <table class="spacer" style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%"> <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> @@ -271,7 +257,7 @@ EOF; </table> EOF; - protected $button = <<<EOF + protected string $button = <<<EOF <table class="spacer" style="border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%%"> <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> @@ -311,7 +297,7 @@ EOF; </table> EOF; - protected $bodyEnd = <<<EOF + protected string $bodyEnd = <<<EOF </td> </tr> @@ -322,7 +308,7 @@ EOF; </table> EOF; - protected $footer = <<<EOF + protected string $footer = <<<EOF <table class="spacer float-center" style="Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%%"> <tbody> <tr style="padding:0;text-align:left;vertical-align:top"> @@ -348,32 +334,27 @@ EOF; </table> EOF; - public function __construct(Defaults $themingDefaults, - IURLGenerator $urlGenerator, - IFactory $l10nFactory, - $emailId, - array $data) { - $this->themingDefaults = $themingDefaults; - $this->urlGenerator = $urlGenerator; - $this->l10nFactory = $l10nFactory; + public function __construct( + protected Defaults $themingDefaults, + protected IURLGenerator $urlGenerator, + protected IFactory $l10nFactory, + protected string $emailId, + protected array $data, + ) { $this->htmlBody .= $this->head; - $this->emailId = $emailId; - $this->data = $data; } /** * Sets the subject of the email - * - * @param string $subject */ - public function setSubject(string $subject) { + public function setSubject(string $subject): void { $this->subject = $subject; } /** * Adds a header to the email */ - public function addHeader() { + public function addHeader(): void { if ($this->headerAdded) { return; } @@ -386,11 +367,10 @@ EOF; /** * Adds a heading to the email * - * @param string $title * @param string|bool $plainTitle Title that is used in the plain text email * if empty the $title is used, if false none will be used */ - public function addHeading(string $title, $plainTitle = '') { + public function addHeading(string $title, $plainTitle = ''): void { if ($this->footerAdded) { return; } @@ -407,7 +387,7 @@ EOF; /** * Open the HTML body when it is not already */ - protected function ensureBodyIsOpened() { + protected function ensureBodyIsOpened(): void { if ($this->bodyOpened) { return; } @@ -423,7 +403,7 @@ EOF; * @param string|bool $plainText Text that is used in the plain text email * if empty the $text is used, if false none will be used */ - public function addBodyText(string $text, $plainText = '') { + public function addBodyText(string $text, $plainText = ''): void { if ($this->footerAdded) { return; } @@ -451,10 +431,17 @@ EOF; * if empty or true the $text is used, if false none will be used * @param string|bool $plainMetaInfo Meta info that is used in the plain text email * if empty or true the $metaInfo is used, if false none will be used - * @param integer plainIndent If > 0, Indent plainText by this amount. + * @param integer $plainIndent plainIndent If > 0, Indent plainText by this amount. * @since 12.0.0 */ - public function addBodyListItem(string $text, string $metaInfo = '', string $icon = '', $plainText = '', $plainMetaInfo = '', $plainIndent = 0) { + public function addBodyListItem( + string $text, + string $metaInfo = '', + string $icon = '', + $plainText = '', + $plainMetaInfo = '', + $plainIndent = 0, + ): void { $this->ensureBodyListOpened(); if ($plainText === '' || $plainText === true) { @@ -504,7 +491,7 @@ EOF; } } - protected function ensureBodyListOpened() { + protected function ensureBodyListOpened(): void { if ($this->bodyListOpened) { return; } @@ -514,7 +501,7 @@ EOF; $this->htmlBody .= $this->listBegin; } - protected function ensureBodyListClosed() { + protected function ensureBodyListClosed(): void { if (!$this->bodyListOpened) { return; } @@ -533,12 +520,14 @@ EOF; * @param string $plainTextLeft Text of left button that is used in the plain text version - if unset the $textLeft is used * @param string $plainTextRight Text of right button that is used in the plain text version - if unset the $textRight is used */ - public function addBodyButtonGroup(string $textLeft, - string $urlLeft, - string $textRight, - string $urlRight, - string $plainTextLeft = '', - string $plainTextRight = '') { + public function addBodyButtonGroup( + string $textLeft, + string $urlLeft, + string $textRight, + string $urlRight, + string $plainTextLeft = '', + string $plainTextRight = '', + ): void { if ($this->footerAdded) { return; } @@ -573,7 +562,7 @@ EOF; * * @since 12.0.0 */ - public function addBodyButton(string $text, string $url, $plainText = '') { + public function addBodyButton(string $text, string $url, $plainText = ''): void { if ($this->footerAdded) { return; } @@ -600,7 +589,7 @@ EOF; /** * Close the HTML body when it is open */ - protected function ensureBodyIsClosed() { + protected function ensureBodyIsClosed(): void { if (!$this->bodyOpened) { return; } @@ -616,7 +605,7 @@ EOF; * * @param string $text If the text is empty the default "Name - Slogan<br>This is an automatically sent email" will be used */ - public function addFooter(string $text = '', ?string $lang = null) { + public function addFooter(string $text = '', ?string $lang = null): void { if ($text === '') { $l10n = $this->l10nFactory->get('lib', $lang); $slogan = $this->themingDefaults->getSlogan($lang); @@ -641,8 +630,6 @@ EOF; /** * Returns the rendered email subject as string - * - * @return string */ public function renderSubject(): string { return $this->subject; @@ -650,8 +637,6 @@ EOF; /** * Returns the rendered HTML email as string - * - * @return string */ public function renderHtml(): string { if (!$this->footerAdded) { @@ -664,8 +649,6 @@ EOF; /** * Returns the rendered plain text email as string - * - * @return string */ public function renderText(): string { if (!$this->footerAdded) { diff --git a/lib/private/Mail/Mailer.php b/lib/private/Mail/Mailer.php index 5d838b2cdf1..9c38794a5c7 100644 --- a/lib/private/Mail/Mailer.php +++ b/lib/private/Mail/Mailer.php @@ -79,34 +79,20 @@ use Symfony\Component\Mime\Exception\RfcComplianceException; */ class Mailer implements IMailer { private ?MailerInterface $instance = null; - private IConfig $config; - private LoggerInterface $logger; - private Defaults $defaults; - private IURLGenerator $urlGenerator; - private IL10N $l10n; - private IEventDispatcher $dispatcher; - private IFactory $l10nFactory; - - public function __construct(IConfig $config, - LoggerInterface $logger, - Defaults $defaults, - IURLGenerator $urlGenerator, - IL10N $l10n, - IEventDispatcher $dispatcher, - IFactory $l10nFactory) { - $this->config = $config; - $this->logger = $logger; - $this->defaults = $defaults; - $this->urlGenerator = $urlGenerator; - $this->l10n = $l10n; - $this->dispatcher = $dispatcher; - $this->l10nFactory = $l10nFactory; + + public function __construct( + private IConfig $config, + private LoggerInterface $logger, + private Defaults $defaults, + private IURLGenerator $urlGenerator, + private IL10N $l10n, + private IEventDispatcher $dispatcher, + private IFactory $l10nFactory, + ) { } /** * Creates a new message object that can be passed to send() - * - * @return Message */ public function createMessage(): Message { $plainTextOnly = $this->config->getSystemValueBool('mail_send_plaintext_only', false); @@ -117,7 +103,6 @@ class Mailer implements IMailer { * @param string|null $data * @param string|null $filename * @param string|null $contentType - * @return IAttachment * @since 13.0.0 */ public function createAttachment($data = null, $filename = null, $contentType = null): IAttachment { @@ -125,9 +110,7 @@ class Mailer implements IMailer { } /** - * @param string $path * @param string|null $contentType - * @return IAttachment * @since 13.0.0 */ public function createAttachmentFromPath(string $path, $contentType = null): IAttachment { @@ -137,9 +120,6 @@ class Mailer implements IMailer { /** * Creates a new email template object * - * @param string $emailId - * @param array $data - * @return IEMailTemplate * @since 12.0.0 */ public function createEMailTemplate(string $emailId, array $data = []): IEMailTemplate { @@ -350,14 +330,10 @@ class Mailer implements IMailer { break; } - switch ($this->config->getSystemValueString('mail_sendmailmode', 'smtp')) { - case 'pipe': - $binaryParam = ' -t'; - break; - default: - $binaryParam = ' -bs'; - break; - } + $binaryParam = match ($this->config->getSystemValueString('mail_sendmailmode', 'smtp')) { + 'pipe' => ' -t', + default => ' -bs', + }; return new SendmailTransport($binaryPath . $binaryParam, null, $this->logger); } diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php index 016340c9692..b0634a4754d 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -46,27 +46,19 @@ use Symfony\Component\Mime\Exception\RfcComplianceException; * @package OC\Mail */ class Message implements IMessage { - private Email $symfonyEmail; - private bool $plainTextOnly; - - private array $to; - private array $from; - private array $replyTo; - private array $cc; - private array $bcc; - - public function __construct(Email $symfonyEmail, bool $plainTextOnly) { - $this->symfonyEmail = $symfonyEmail; - $this->plainTextOnly = $plainTextOnly; - $this->to = []; - $this->from = []; - $this->replyTo = []; - $this->cc = []; - $this->bcc = []; + private array $to = []; + private array $from = []; + private array $replyTo = []; + private array $cc = []; + private array $bcc = []; + + public function __construct( + private Email $symfonyEmail, + private bool $plainTextOnly, + ) { } /** - * @return $this * @since 13.0.0 */ public function attach(IAttachment $attachment): IMessage { @@ -122,7 +114,6 @@ class Message implements IMessage { * If no "From" address is used \OC\Mail\Mailer will use mail_from_address and mail_domain from config.php * * @param array $addresses Example: array('sender@domain.org', 'other@domain.org' => 'A name') - * @return $this */ public function setFrom(array $addresses): IMessage { $this->from = $addresses; @@ -138,8 +129,6 @@ class Message implements IMessage { /** * Set the Reply-To address of this message - * - * @return $this */ public function setReplyTo(array $addresses): IMessage { $this->replyTo = $addresses; @@ -157,7 +146,6 @@ class Message implements IMessage { * Set the to addresses of this message. * * @param array $recipients Example: array('recipient@domain.org', 'other@domain.org' => 'A name') - * @return $this */ public function setTo(array $recipients): IMessage { $this->to = $recipients; @@ -175,7 +163,6 @@ class Message implements IMessage { * Set the CC recipients of this message. * * @param array $recipients Example: array('recipient@domain.org', 'other@domain.org' => 'A name') - * @return $this */ public function setCc(array $recipients): IMessage { $this->cc = $recipients; @@ -193,7 +180,6 @@ class Message implements IMessage { * Set the BCC recipients of this message. * * @param array $recipients Example: array('recipient@domain.org', 'other@domain.org' => 'A name') - * @return $this */ public function setBcc(array $recipients): IMessage { $this->bcc = $recipients; @@ -241,7 +227,7 @@ class Message implements IMessage { } /** - * Set the underlying Email intance + * Set the underlying Email instance */ public function setSymfonyEmail(Email $symfonyEmail): void { $this->symfonyEmail = $symfonyEmail; @@ -254,9 +240,6 @@ class Message implements IMessage { return $this->symfonyEmail; } - /** - * @return $this - */ public function setBody(string $body, string $contentType): IMessage { if (!$this->plainTextOnly || $contentType !== 'text/html') { if ($contentType === 'text/html') { @@ -284,10 +267,9 @@ class Message implements IMessage { * we wrap the calls here. We then have the validation errors all in one place and can * throw shortly before \OC\Mail\Mailer::send * - * @return void * @throws InvalidArgumentException|RfcComplianceException */ - public function setRecipients() { + public function setRecipients(): void { $this->symfonyEmail->to(...$this->convertAddresses($this->getTo())); $this->symfonyEmail->from(...$this->convertAddresses($this->getFrom())); $this->symfonyEmail->replyTo(...$this->convertAddresses($this->getReplyTo())); @@ -295,9 +277,6 @@ class Message implements IMessage { $this->symfonyEmail->bcc(...$this->convertAddresses($this->getBcc())); } - /** - * @return $this - */ public function useTemplate(IEMailTemplate $emailTemplate): IMessage { $this->setSubject($emailTemplate->renderSubject()); $this->setPlainBody($emailTemplate->renderText()); @@ -335,8 +314,6 @@ class Message implements IMessage { /** * Get the current value of the Auto-Submitted header. Defaults to "no" * which is equivalent to the header not existing at all - * - * @return string */ public function getAutoSubmitted(): string { $headers = $this->symfonyEmail->getHeaders(); |