From 6fecf870a9343752e6dca37e8add5bc15e27997e Mon Sep 17 00:00:00 2001 From: Sebastien DUMETZ Date: Thu, 13 Feb 2025 14:30:59 +0100 Subject: [PATCH] improve email templates --- source/server/routes/admin/mailtest.ts | 12 ++++++++---- source/server/routes/views/index.ts | 4 ++-- source/server/templates/emails/connection_fr.hbs | 8 +++----- source/server/templates/emails/test.hbs | 4 ++++ source/server/templates/locales/en.yml | 9 ++++++++- source/server/templates/locales/fr.yml | 9 +++++++++ 6 files changed, 34 insertions(+), 12 deletions(-) create mode 100644 source/server/templates/emails/test.hbs diff --git a/source/server/routes/admin/mailtest.ts b/source/server/routes/admin/mailtest.ts index d1ed88a5..a043df03 100644 --- a/source/server/routes/admin/mailtest.ts +++ b/source/server/routes/admin/mailtest.ts @@ -2,6 +2,7 @@ import { Request, Response } from "express"; import sendmail from "../../utils/mails/send.js"; import { getLocals, getUser } from "../../utils/locals.js"; import { BadRequestError } from "../../utils/errors.js"; +import { useTemplateProperties } from "../views/index.js"; /** * Send a test email @@ -14,13 +15,16 @@ export default async function handleMailtest(req :Request, res :Response){ if(!to){ throw new BadRequestError("No email address found for user "+ requester); } + useTemplateProperties(req, res); + const mail_content = await getLocals(req).templates.render(`emails/test`, { + brand: config.brand, + hostname: config.hostname, + }); let out = await sendmail({ to, subject: config.brand+" test email", - html: [ - `\t

${config.brand} test email

`, - `\t

This is a test email sent from the admin panel of ${config.hostname}

`, - ].join("\n")}); + html: mail_content + }); res.status(200).send(out); } \ No newline at end of file diff --git a/source/server/routes/views/index.ts b/source/server/routes/views/index.ts index 2ec8c938..af89bfc5 100644 --- a/source/server/routes/views/index.ts +++ b/source/server/routes/views/index.ts @@ -30,7 +30,7 @@ routes.use("/", (req :Request, res:Response, next)=>{ * Common properties for template rendering. * All props required for navbar/footer rendering should be set here */ -export function useTemplateProperties(req :Request, res:Response, next:NextFunction){ +export function useTemplateProperties(req :Request, res:Response, next?:NextFunction){ const session = getSession(req); const user = getUser(req); const {search} = req.query; @@ -45,7 +45,7 @@ export function useTemplateProperties(req :Request, res:Response, next:NextFunct location: req.originalUrl, search, }) - next(); + if(next) next(); } routes.use("/", useTemplateProperties); diff --git a/source/server/templates/emails/connection_fr.hbs b/source/server/templates/emails/connection_fr.hbs index 199695f2..cbb3b110 100644 --- a/source/server/templates/emails/connection_fr.hbs +++ b/source/server/templates/emails/connection_fr.hbs @@ -3,10 +3,7 @@

Bonjour {{name}},

Nous venons de recevoir une demande de lien de connexion pour un compte lié à votre adresse.
- Si vous n'êtes pas à l'origine de cette demande, vous pouvez ignorer cet email. -

-

- Sinon, vous pouvez vous connecter en cliquant sur le bouton ci-dessous. + Connectez-vous en cliquant sur le bouton ci-dessous:

Connectez-vous @@ -18,5 +15,6 @@ Une fois connecté, n'oubliez pas de réinitialiser votre mot de passe!

- Pour rapporter toute erreur, vous pouvez nous contacter sur la page du projet eThesaurus + Si vous n'êtes pas à l'origine de cette demande, vous pouvez ignorer cet email.
+ Pour rapporter toute erreur, veuillez contacter votre administrateur eCorpus.

diff --git a/source/server/templates/emails/test.hbs b/source/server/templates/emails/test.hbs new file mode 100644 index 00000000..8ca647ca --- /dev/null +++ b/source/server/templates/emails/test.hbs @@ -0,0 +1,4 @@ +

{{i18n "titles.testEmail" what=brand }}

+

{{{i18n "leads.testEmail" hostname=hostname}}}

+

{{i18n "titles.testEmailVerify"}}

+

{{{i18n "leads.testEmailDKIM"}}}

\ No newline at end of file diff --git a/source/server/templates/locales/en.yml b/source/server/templates/locales/en.yml index c0e7b440..b4f68c44 100644 --- a/source/server/templates/locales/en.yml +++ b/source/server/templates/locales/en.yml @@ -89,6 +89,8 @@ titles: permissions: Access rights archives: Archived Scenes rename: Rename this scene + testEmail: "{{what}} email system test" + testEmailVerify: Additional verifications tooltips: showPassword: Show the password's text permissions: > @@ -135,7 +137,12 @@ leads: rename: > Changing a scene's name will break all existing links pointing to it. Proceed with care! - + testEmail: > + This is a test message from {{hostname}}. + If it lands in your inbox, your email setup is probably OK. + testEmailDKIM: > + To be extra safe and prevent (most) emails being flagged as SPAM, check the DKIM signature using tools like Google's + Postmaster Tools. errors: generic: Unknown Error "Username not provided": Username not provided diff --git a/source/server/templates/locales/fr.yml b/source/server/templates/locales/fr.yml index 16def6a0..7e294e42 100644 --- a/source/server/templates/locales/fr.yml +++ b/source/server/templates/locales/fr.yml @@ -90,6 +90,8 @@ titles: permissions: Droits d'accès archives: Scènes archivées rename: Renommer la scène + testEmail: Test du système d'email de {{what}} + testEmailVerify: Vérifications supplémentaires tooltips: showPassword: Montrer le texte du mot de passe permissions: > @@ -135,6 +137,13 @@ leads: Vous ne pouvez pas changer vos propres droits d'accès à cette scène. Si nécessaire, demandez de l'aide à un administrateur rename: > Attention: Changer le nom d'une scène cassera tous les liens qui pointent vers elle! + testEmail: > + Ceci est un email de test envoyé par {{hostname}}. + Si vous le recevez et qu'il n'atterit pas dans les spams, c'est que votre instance est probablement bien configurée + testEmailDKIM: > + Afin d'assurer un bon taux de succès, il peut être utile de vérifier la signature DKIM du message.
+ Pour GMAIL, vous pouvez utiliser l'outil Postmaster Tools. + errors: generic: Erreur inconnue "Username not provided": Nom d'utilisateur non fourni