diff --git a/app/config/locale/templates/email-base.tpl b/app/config/locale/templates/email-base.tpl index 4801c6fb2..56c3c36ab 100644 --- a/app/config/locale/templates/email-base.tpl +++ b/app/config/locale/templates/email-base.tpl @@ -54,16 +54,6 @@
- - - -
-

- {{subject}} -

-
- -
{{body}} diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index b6056b9e7..0cacefac5 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -1091,50 +1091,60 @@ App::post('/v1/account/sessions/magic-url') $url['query'] = Template::mergeQuery(((isset($url['query'])) ? $url['query'] : ''), ['userId' => $user->getId(), 'secret' => $loginSecret, 'expire' => $expire, 'project' => $project->getId()]); $url = Template::unParseURL($url); - $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $project->getAttribute('name')); $body = $locale->getText("emails.magicSession.body"); $subject = $locale->getText("emails.magicSession.subject"); - - $smtpEnabled = $project->getAttribute('smtp', [])['enabled'] ?? false; $customTemplate = $project->getAttribute('templates', [])['email.magicSession-' . $locale->default] ?? []; - if ($smtpEnabled && !empty($customTemplate)) { - $body = $customTemplate['message'] ?? ''; - $subject = $customTemplate['subject'] ?? $subject; - $from = $customTemplate['senderName'] ?? $from; - $senderEmail = $customTemplate['senderEmail'] ?? ''; - $senderEmail = $senderEmail ?: ($smtp['senderEmail'] ?? ''); - $senderEmail = $senderEmail ?: App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl'); + $message->setParam('{{body}}', $body); + $body = $message->render(); - $senderName = $customTemplate['senderName'] ?? ''; - $senderName = $senderName ?: ($smtp['senderName'] ?? ''); - $senderName = $senderName ?: App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server'); + $smtp = $project->getAttribute('smtp', []); + $smtpEnabled = $smtp['enabled'] ?? false; - $replyTo = $customTemplate['replyTo'] ?? ''; - $replyTo = $replyTo ?: ($smtp['replyTo'] ?? ''); - $replyTo = $senderEmail; + $senderEmail = App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $senderName = App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server'); + $replyTo = ""; + + if ($smtpEnabled) { + if (!empty($smtp['senderEmail'])) { + $senderEmail = $smtp['senderEmail']; + } + if (!empty($smtp['senderName'])) { + $senderName = $smtp['senderName']; + } + if (!empty($smtp['replyTo'])) { + $replyTo = $smtp['replyTo']; + } - $smtp = $project->getAttribute('smtp', []); $mails ->setSmtpHost($smtp['host'] ?? '') ->setSmtpPort($smtp['port'] ?? '') ->setSmtpUsername($smtp['username'] ?? '') ->setSmtpPassword($smtp['password'] ?? '') - ->setSmtpSecure($smtp['secure'] ?? '') - ->setSmtpReplyTo($replyTo) - ->setSmtpSenderEmail($senderEmail) - ->setSmtpSenderName($senderName); - } else { - $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl'); - $message->setParam('{{body}}', $body); - $body = $message->render(); - - $mails - ->setSmtpReplyTo(App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM)) - ->setSmtpSenderEmail(App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM)) - ->setSmtpSenderName(App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server')); + ->setSmtpSecure($smtp['secure'] ?? ''); } + if (!empty($customTemplate)) { + if (!empty($customTemplate['senderEmail'])) { + $senderEmail = $customTemplate['senderEmail']; + } + if (!empty($customTemplate['senderName'])) { + $senderName = $customTemplate['senderName']; + } + if (!empty($customTemplate['replyTo'])) { + $replyTo = $customTemplate['replyTo']; + } + + $body = $customTemplate['message'] ?? ''; + $subject = $customTemplate['subject'] ?? $subject; + } + + $mails + ->setSmtpReplyTo($replyTo) + ->setSmtpSenderEmail($senderEmail) + ->setSmtpSenderName($senderName); + $emailVariables = [ 'subject' => $subject, 'hello' => $locale->getText("emails.magicSession.hello"), @@ -1153,9 +1163,8 @@ App::post('/v1/account/sessions/magic-url') $mails ->setSubject($subject) - ->setBody($body->render()) + ->setBody($body) ->setVariables($emailVariables) - ->setFrom($from) ->setRecipient($user->getAttribute('email')) ->trigger() ; @@ -2539,50 +2548,60 @@ App::post('/v1/account/recovery') $url = Template::unParseURL($url); $projectName = $project->isEmpty() ? 'Console' : $project->getAttribute('name', '[APP-NAME]'); - $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $projectName); $body = $locale->getText("emails.recovery.body"); $subject = $locale->getText("emails.recovery.subject"); - - $smtpEnabled = $project->getAttribute('smtp', [])['enabled'] ?? false; $customTemplate = $project->getAttribute('templates', [])['email.recovery-' . $locale->default] ?? []; - if ($smtpEnabled && !empty($customTemplate)) { - $body = $customTemplate['message']; - $subject = $customTemplate['subject'] ?? $subject; - $from = $customTemplate['senderName'] ?? $from; - $senderEmail = $customTemplate['senderEmail'] ?? ''; - $senderEmail = $senderEmail ?: ($smtp['senderEmail'] ?? ''); - $senderEmail = $senderEmail ?: App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl'); + $message->setParam('{{body}}', $body); + $body = $message->render(); - $senderName = $customTemplate['senderName'] ?? ''; - $senderName = $senderName ?: ($smtp['senderName'] ?? ''); - $senderName = $senderName ?: App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server'); + $smtp = $project->getAttribute('smtp', []); + $smtpEnabled = $smtp['enabled'] ?? false; - $replyTo = $customTemplate['replyTo'] ?? ''; - $replyTo = $replyTo ?: ($smtp['replyTo'] ?? ''); - $replyTo = $senderEmail; + $senderEmail = App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $senderName = App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server'); + $replyTo = ""; + + if ($smtpEnabled) { + if (!empty($smtp['senderEmail'])) { + $senderEmail = $smtp['senderEmail']; + } + if (!empty($smtp['senderName'])) { + $senderName = $smtp['senderName']; + } + if (!empty($smtp['replyTo'])) { + $replyTo = $smtp['replyTo']; + } - $smtp = $project->getAttribute('smtp', []); $mails ->setSmtpHost($smtp['host'] ?? '') ->setSmtpPort($smtp['port'] ?? '') ->setSmtpUsername($smtp['username'] ?? '') ->setSmtpPassword($smtp['password'] ?? '') - ->setSmtpSecure($smtp['secure'] ?? '') - ->setSmtpReplyTo($replyTo) - ->setSmtpSenderEmail($senderEmail) - ->setSmtpSenderName($senderName); - } else { - $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl'); - $message->setParam('{{body}}', $body); - $body = $message->render(); - - $mails - ->setSmtpReplyTo(App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM)) - ->setSmtpSenderEmail(App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM)) - ->setSmtpSenderName(App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server')); + ->setSmtpSecure($smtp['secure'] ?? ''); } + if (!empty($customTemplate)) { + if (!empty($customTemplate['senderEmail'])) { + $senderEmail = $customTemplate['senderEmail']; + } + if (!empty($customTemplate['senderName'])) { + $senderName = $customTemplate['senderName']; + } + if (!empty($customTemplate['replyTo'])) { + $replyTo = $customTemplate['replyTo']; + } + + $body = $customTemplate['message'] ?? ''; + $subject = $customTemplate['subject'] ?? $subject; + } + + $mails + ->setSmtpReplyTo($replyTo) + ->setSmtpSenderEmail($senderEmail) + ->setSmtpSenderName($senderName); + $emailVariables = [ 'subject' => $subject, 'hello' => $locale->getText("emails.recovery.hello"), @@ -2605,7 +2624,6 @@ App::post('/v1/account/recovery') ->setName($profile->getAttribute('name')) ->setBody($body) ->setVariables($emailVariables) - ->setFrom($from) ->setSubject($subject) ->trigger(); ; @@ -2781,50 +2799,60 @@ App::post('/v1/account/verification') $url = Template::unParseURL($url); $projectName = $project->isEmpty() ? 'Console' : $project->getAttribute('name', '[APP-NAME]'); - $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $projectName); $body = $locale->getText("emails.verification.body"); $subject = $locale->getText("emails.verification.subject"); - - $smtpEnabled = $project->getAttribute('smtp', [])['enabled'] ?? false; $customTemplate = $project->getAttribute('templates', [])['email.verification-' . $locale->default] ?? []; - if ($smtpEnabled && !empty($customTemplate)) { - $body = $customTemplate['message'] ?? ''; - $subject = $customTemplate['subject'] ?? $subject; - $from = $customTemplate['senderName'] ?? $from; - $senderEmail = $customTemplate['senderEmail'] ?? ''; - $senderEmail = $senderEmail ?: ($smtp['senderEmail'] ?? ''); - $senderEmail = $senderEmail ?: App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl'); + $message->setParam('{{body}}', $body); + $body = $message->render(); - $senderName = $customTemplate['senderName'] ?? ''; - $senderName = $senderName ?: ($smtp['senderName'] ?? ''); - $senderName = $senderName ?: App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server'); + $smtp = $project->getAttribute('smtp', []); + $smtpEnabled = $smtp['enabled'] ?? false; - $replyTo = $customTemplate['replyTo'] ?? ''; - $replyTo = $replyTo ?: ($smtp['replyTo'] ?? ''); - $replyTo = $senderEmail; + $senderEmail = App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $senderName = App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server'); + $replyTo = ""; + + if ($smtpEnabled) { + if (!empty($smtp['senderEmail'])) { + $senderEmail = $smtp['senderEmail']; + } + if (!empty($smtp['senderName'])) { + $senderName = $smtp['senderName']; + } + if (!empty($smtp['replyTo'])) { + $replyTo = $smtp['replyTo']; + } - $smtp = $project->getAttribute('smtp', []); $mails ->setSmtpHost($smtp['host'] ?? '') ->setSmtpPort($smtp['port'] ?? '') ->setSmtpUsername($smtp['username'] ?? '') ->setSmtpPassword($smtp['password'] ?? '') - ->setSmtpSecure($smtp['secure'] ?? '') - ->setSmtpReplyTo($replyTo) - ->setSmtpSenderEmail($senderEmail) - ->setSmtpSenderName($senderName); - } else { - $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl'); - $message->setParam('{{body}}', $body); - $body = $message->render(); - - $mails - ->setSmtpReplyTo(App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM)) - ->setSmtpSenderEmail(App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM)) - ->setSmtpSenderName(App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server')); + ->setSmtpSecure($smtp['secure'] ?? ''); } + if (!empty($customTemplate)) { + if (!empty($customTemplate['senderEmail'])) { + $senderEmail = $customTemplate['senderEmail']; + } + if (!empty($customTemplate['senderName'])) { + $senderName = $customTemplate['senderName']; + } + if (!empty($customTemplate['replyTo'])) { + $replyTo = $customTemplate['replyTo']; + } + + $body = $customTemplate['message'] ?? ''; + $subject = $customTemplate['subject'] ?? $subject; + } + + $mails + ->setSmtpReplyTo($replyTo) + ->setSmtpSenderEmail($senderEmail) + ->setSmtpSenderName($senderName); + $emailVariables = [ 'subject' => $subject, 'hello' => $locale->getText("emails.verification.hello"), @@ -2845,7 +2873,6 @@ App::post('/v1/account/verification') ->setSubject($subject) ->setBody($body) ->setVariables($emailVariables) - ->setFrom($from) ->setRecipient($user->getAttribute('email')) ->setName($user->getAttribute('name') ?? '') ->trigger() diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 1359d23b3..c3c033648 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -1682,13 +1682,11 @@ App::get('/v1/projects/:projectId/templates/email/:type/:locale') ->setParam('{{direction}}', $localeObj->getText('settings.direction')); $message = $message->render(); - $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($localeObj->getText('emails.sender'), $project->getAttribute('name')); - $from = empty($from) ? \urldecode(App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server')) : $from; $template = [ 'message' => $message, 'subject' => $localeObj->getText('emails.' . $type . '.subject'), - 'senderEmail' => App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', ''), - 'senderName' => $from + 'senderEmail' => '', + 'senderName' => '' ]; } diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index da669c40e..f4d4604b1 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -543,50 +543,60 @@ App::post('/v1/teams/:teamId/memberships') if (!empty($email)) { $projectName = $project->isEmpty() ? 'Console' : $project->getAttribute('name', '[APP-NAME]'); - $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $projectName); $body = $locale->getText("emails.invitation.body"); $subject = \sprintf($locale->getText("emails.invitation.subject"), $team->getAttribute('name'), $projectName); - - $smtpEnabled = $project->getAttribute('smtp', [])['enabled'] ?? false; $customTemplate = $project->getAttribute('templates', [])['email.invitation-' . $locale->default] ?? []; - if ($smtpEnabled && !empty($customTemplate)) { - $body = Template::fromString($customTemplate['message'] ?? ''); - $subject = $customTemplate['subject'] ?? $subject; - $from = $customTemplate['senderName'] ?? $from; - $senderEmail = $customTemplate['senderEmail'] ?? ''; - $senderEmail = $senderEmail ?: ($smtp['senderEmail'] ?? ''); - $senderEmail = $senderEmail ?: App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl'); + $message->setParam('{{body}}', $body); + $body = $message->render(); - $senderName = $customTemplate['senderName'] ?? ''; - $senderName = $senderName ?: ($smtp['senderName'] ?? ''); - $senderName = $senderName ?: App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server'); + $smtp = $project->getAttribute('smtp', []); + $smtpEnabled = $smtp['enabled'] ?? false; - $replyTo = $customTemplate['replyTo'] ?? ''; - $replyTo = $replyTo ?: ($smtp['replyTo'] ?? ''); - $replyTo = $senderEmail; + $senderEmail = App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM); + $senderName = App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server'); + $replyTo = ""; + + if ($smtpEnabled) { + if (!empty($smtp['senderEmail'])) { + $senderEmail = $smtp['senderEmail']; + } + if (!empty($smtp['senderName'])) { + $senderName = $smtp['senderName']; + } + if (!empty($smtp['replyTo'])) { + $replyTo = $smtp['replyTo']; + } - $smtp = $project->getAttribute('smtp', []); $mails ->setSmtpHost($smtp['host'] ?? '') ->setSmtpPort($smtp['port'] ?? '') ->setSmtpUsername($smtp['username'] ?? '') ->setSmtpPassword($smtp['password'] ?? '') - ->setSmtpSecure($smtp['secure'] ?? '') - ->setSmtpReplyTo($replyTo) - ->setSmtpSenderEmail($senderEmail) - ->setSmtpSenderName($senderName); - } else { - $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl'); - $message->setParam('{{body}}', $body); - $body = $message->render(); - - $mails - ->setSmtpReplyTo(App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM)) - ->setSmtpSenderEmail(App::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM)) - ->setSmtpSenderName(App::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server')); + ->setSmtpSecure($smtp['secure'] ?? ''); } + if (!empty($customTemplate)) { + if (!empty($customTemplate['senderEmail'])) { + $senderEmail = $customTemplate['senderEmail']; + } + if (!empty($customTemplate['senderName'])) { + $senderName = $customTemplate['senderName']; + } + if (!empty($customTemplate['replyTo'])) { + $replyTo = $customTemplate['replyTo']; + } + + $body = $customTemplate['message'] ?? ''; + $subject = $customTemplate['subject'] ?? $subject; + } + + $mails + ->setSmtpReplyTo($replyTo) + ->setSmtpSenderEmail($senderEmail) + ->setSmtpSenderName($senderName); + $emailVariables = [ 'owner' => $user->getAttribute('name'), 'team' => $team->getAttribute('name'), @@ -608,7 +618,6 @@ App::post('/v1/teams/:teamId/memberships') $mails ->setSubject($subject) ->setBody($body) - ->setFrom($from) ->setRecipient($invitee->getAttribute('email')) ->setName($invitee->getAttribute('name')) ->setVariables($emailVariables) diff --git a/app/workers/mails.php b/app/workers/mails.php index 649d44742..5fd20d259 100644 --- a/app/workers/mails.php +++ b/app/workers/mails.php @@ -38,7 +38,6 @@ class MailsV1 extends Worker $name = $this->args['name']; $body = $this->args['body']; $variables = $this->args['variables']; - $from = $this->args['from']; $body = Template::fromFile(__DIR__ . '/../config/locale/templates/email-base.tpl'); diff --git a/src/Appwrite/Event/Mail.php b/src/Appwrite/Event/Mail.php index 477d54d57..e1c015fb2 100644 --- a/src/Appwrite/Event/Mail.php +++ b/src/Appwrite/Event/Mail.php @@ -8,7 +8,6 @@ use Utopia\Database\Document; class Mail extends Event { protected string $recipient = ''; - protected string $from = ''; protected string $name = ''; protected string $subject = ''; protected string $body = ''; @@ -66,29 +65,6 @@ class Mail extends Event return $this->recipient; } - /** - * Sets from for the mail event. - * - * @param string $from - * @return self - */ - public function setFrom(string $from): self - { - $this->from = $from; - - return $this; - } - - /** - * Returns from for mail event. - * - * @return string - */ - public function getFrom(): string - { - return $this->from; - } - /** * Sets body for the mail event. * @@ -342,7 +318,6 @@ class Mail extends Event public function trigger(): string|bool { return Resque::enqueue($this->queue, $this->class, [ - 'from' => $this->from, 'recipient' => $this->recipient, 'name' => $this->name, 'subject' => $this->subject,