From 0177ddccb33513242ab07864c950834a2198efe1 Mon Sep 17 00:00:00 2001 From: Damodar Lohani Date: Wed, 19 Apr 2023 08:29:29 +0000 Subject: [PATCH] use custom templates to send email when enabled --- app/config/locale/templates.php | 1 + app/controllers/api/account.php | 45 ++++++++++++++++++++++++++++++--- app/controllers/api/teams.php | 15 +++++++++++ app/controllers/shared/api.php | 3 +-- src/Appwrite/Event/Mail.php | 22 ---------------- 5 files changed, 59 insertions(+), 27 deletions(-) diff --git a/app/config/locale/templates.php b/app/config/locale/templates.php index 98f6a8bb93..f2672c04a0 100644 --- a/app/config/locale/templates.php +++ b/app/config/locale/templates.php @@ -9,6 +9,7 @@ return [ ], 'sms' => [ 'verification', + 'login', 'invitation' ] ]; diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 8933b23971..02f2ee411d 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -734,10 +734,17 @@ App::post('/v1/account/sessions/magic-url') $url = Template::unParseURL($url); $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $project->getAttribute('name')); - $body = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-base.tpl'); $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']; + $from = $customTemplate['senderName']; + } + $body ->setParam('{{subject}}', $subject) ->setParam('{{hello}}', $locale->getText("emails.magicSession.hello")) @@ -926,7 +933,8 @@ App::post('/v1/account/sessions/phone') ->inject('dbForProject') ->inject('events') ->inject('messaging') - ->action(function (string $userId, string $phone, Request $request, Response $response, Document $project, Database $dbForProject, Event $events, EventPhone $messaging) { + ->inject('locale') + ->action(function (string $userId, string $phone, Request $request, Response $response, Document $project, Database $dbForProject, Event $events, EventPhone $messaging, Locale $locale) { if (empty(App::getEnv('_APP_SMS_PROVIDER'))) { throw new Exception(Exception::GENERAL_PHONE_DISABLED, 'Phone provider not configured'); @@ -1001,6 +1009,12 @@ App::post('/v1/account/sessions/phone') $dbForProject->deleteCachedDocument('users', $user->getId()); $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/sms-base.tpl'); + + $customTemplate = $project->getAttribute('templates', [])['sms.login-' . $locale->default] ?? []; + if(!empty($customTemplate)) { + $message = $customTemplate['message']; + } + $message = $message->setParam('{{token}}', $secret); $message = $message->render(); @@ -2098,6 +2112,14 @@ App::post('/v1/account/recovery') $body = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-base.tpl'); $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']; + $from = $customTemplate['senderName']; + } + $body ->setParam('{{subject}}', $subject) ->setParam('{{hello}}', $locale->getText("emails.recovery.hello")) @@ -2281,6 +2303,15 @@ App::post('/v1/account/verification') $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $projectName); $body = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-base.tpl'); $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']; + $from = $customTemplate['senderName']; + } + $body ->setParam('{{subject}}', $subject) ->setParam('{{hello}}', $locale->getText("emails.verification.hello")) @@ -2408,7 +2439,9 @@ App::post('/v1/account/verification/phone') ->inject('dbForProject') ->inject('events') ->inject('messaging') - ->action(function (Request $request, Response $response, Document $user, Database $dbForProject, Event $events, EventPhone $messaging) { + ->inject('project') + ->inject('locale') + ->action(function (Request $request, Response $response, Document $user, Database $dbForProject, Event $events, EventPhone $messaging, Document $project, Locale $locale) { if (empty(App::getEnv('_APP_SMS_PROVIDER'))) { throw new Exception(Exception::GENERAL_PHONE_DISABLED); @@ -2448,6 +2481,12 @@ App::post('/v1/account/verification/phone') $dbForProject->deleteCachedDocument('users', $user->getId()); $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/sms-base.tpl'); + + $customTemplate = $project->getAttribute('templates', [])['sms.verification-' . $locale->default] ?? []; + if(!empty($customTemplate)) { + $message = $customTemplate['message']; + } + $message = $message->setParam('{{token}}', $secret); $message = $message->render(); diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 03e423a566..02d832b52e 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -542,6 +542,15 @@ App::post('/v1/teams/:teamId/memberships') $from = $project->isEmpty() || $project->getId() === 'console' ? '' : \sprintf($locale->getText('emails.sender'), $projectName); $body = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-base.tpl'); $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 = $customTemplate['message']; + $subject = $customTemplate['subject']; + $from = $customTemplate['senderName']; + } + $body->setParam('{{owner}}', $user->getAttribute('name')); $body->setParam('{{team}}', $team->getAttribute('name')); @@ -572,6 +581,12 @@ App::post('/v1/teams/:teamId/memberships') ; } elseif (!empty($phone)) { $message = Template::fromFile(__DIR__ . '/../../config/locale/templates/sms-base.tpl'); + + $customTemplate = $project->getAttribute('templates', [])['sms.invitation-' . $locale->default] ?? []; + if(!empty($customTemplate)) { + $message = $customTemplate['message']; + } + $message = $message->setParam('{{token}}', $url); $message = $message->render(); diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index f240431553..40626cbbba 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -200,8 +200,7 @@ App::init() ->setSmtpPort($smtp['port'] ?? 25) ->setSmtpUsername($smtp['username'] ?? '') ->setSmtpPassword($smtp['password'] ?? '') - ->setSmtpSenderEmail($smtp['senderEmail'] ?? '') - ->setSmtpSenderName($smtp['senderName'] ?? '') + ->setSmtpSenderEmail($smtp['sender'] ?? '') ->setSmtpReplyTo($smtp['replyTo'] ?? ''); } diff --git a/src/Appwrite/Event/Mail.php b/src/Appwrite/Event/Mail.php index 1ba8b8c736..37b42704c5 100644 --- a/src/Appwrite/Event/Mail.php +++ b/src/Appwrite/Event/Mail.php @@ -182,18 +182,6 @@ class Mail extends Event return $this; } - /** - * Set SMTP sender name - * - * @param string $senderName - * @return self - */ - public function setSmtpSenderName(string $senderName): self - { - $this->smtp['senderName'] = $senderName; - return $this; - } - /** * Set SMTP sender email * @@ -258,16 +246,6 @@ class Mail extends Event return $this->smtp['password'] ?? ''; } - /** - * Get SMTP sender name - * - * @return string - */ - public function getSmtpSenderName(): string - { - return $this->smtp['senderName'] ?? ''; - } - /** * Get SMTP sender email *