From dbf328452cca0d4591aae1521f93fec0a1fead85 Mon Sep 17 00:00:00 2001 From: Juuso Tapaninen Date: Thu, 25 Sep 2025 14:43:59 +0300 Subject: [PATCH] feat(core): Adjust n8n email template styling (#19969) --- .../__tests__/user-management-mailer.test.ts | 2 +- .../email/templates/_common.mjml | 27 +++++++---------- .../email/templates/_footer.mjml | 7 +++++ .../email/templates/_logo.mjml | 6 +--- .../email/templates/credentials-shared.mjml | 11 +++---- .../templates/password-reset-requested.mjml | 30 ++++++------------- .../email/templates/project-shared.mjml | 19 +++++------- .../email/templates/user-invited.mjml | 15 ++++------ .../email/templates/workflow-shared.mjml | 11 +++---- .../email/user-management-mailer.ts | 6 ++-- 10 files changed, 53 insertions(+), 81 deletions(-) create mode 100644 packages/cli/src/user-management/email/templates/_footer.mjml diff --git a/packages/cli/src/user-management/email/__tests__/user-management-mailer.test.ts b/packages/cli/src/user-management/email/__tests__/user-management-mailer.test.ts index d0c50ce5d87..80a4bbcf3ea 100644 --- a/packages/cli/src/user-management/email/__tests__/user-management-mailer.test.ts +++ b/packages/cli/src/user-management/email/__tests__/user-management-mailer.test.ts @@ -189,7 +189,7 @@ describe('UserManagementMailer', () => { const callBody = nodeMailer.sendMail.mock.calls[index][0].body; expect(callBody).toContain( - `You have been added to the ${project.name} project as ${sharee.role.replace('project:', '')}`, + `You have been added to the ${project.name} project as ${sharee.role.replace('project:', '')}`, ); }); }); diff --git a/packages/cli/src/user-management/email/templates/_common.mjml b/packages/cli/src/user-management/email/templates/_common.mjml index 7b3bd552d06..e4df45293ac 100644 --- a/packages/cli/src/user-management/email/templates/_common.mjml +++ b/packages/cli/src/user-management/email/templates/_common.mjml @@ -1,20 +1,13 @@ - - - - - + + + + + + + + + + diff --git a/packages/cli/src/user-management/email/templates/_footer.mjml b/packages/cli/src/user-management/email/templates/_footer.mjml new file mode 100644 index 00000000000..0fd42240351 --- /dev/null +++ b/packages/cli/src/user-management/email/templates/_footer.mjml @@ -0,0 +1,7 @@ + + + + + n8n GmbH, Novalisstraße 10, 10115 Berlin, Germany
+ ©{{ currentYear }} n8n GmbH, all rights reserved
+
diff --git a/packages/cli/src/user-management/email/templates/_logo.mjml b/packages/cli/src/user-management/email/templates/_logo.mjml index 8532c30ef4b..476208d0508 100644 --- a/packages/cli/src/user-management/email/templates/_logo.mjml +++ b/packages/cli/src/user-management/email/templates/_logo.mjml @@ -1,5 +1 @@ - - - - - + diff --git a/packages/cli/src/user-management/email/templates/credentials-shared.mjml b/packages/cli/src/user-management/email/templates/credentials-shared.mjml index 6b7adf038c3..60a796cad1f 100644 --- a/packages/cli/src/user-management/email/templates/credentials-shared.mjml +++ b/packages/cli/src/user-management/email/templates/credentials-shared.mjml @@ -1,17 +1,14 @@ - - - - A credential has been shared with you - - - + + + A credential has been shared with you "{{ credentialsName }}" credential has been shared with you. To access it, please click the button below. Open credential + diff --git a/packages/cli/src/user-management/email/templates/password-reset-requested.mjml b/packages/cli/src/user-management/email/templates/password-reset-requested.mjml index a5302fd376f..e952560ad82 100644 --- a/packages/cli/src/user-management/email/templates/password-reset-requested.mjml +++ b/packages/cli/src/user-management/email/templates/password-reset-requested.mjml @@ -1,30 +1,18 @@ - - + - Reset your n8n password - - - - - Hi {{firstName}}, - Somebody asked to reset your password on n8n at {{domain}} . - Click the following link to choose a new password. + + Reset your n8n password + Hi {{firstName}}, + Somebody asked to reset your password on n8n at {{domain}}. + Click the following link to choose a new password. Set a new password - - - The link is only valid for 20 minutes since this email was sent. - - - - - - - If you did not request this email, you can safely ignore this.
- Your password will not be changed. + + The link is only valid for 20 minutes since this email was sent. If you did not request this email, you can safely ignore this. Your password will not be changed. +
diff --git a/packages/cli/src/user-management/email/templates/project-shared.mjml b/packages/cli/src/user-management/email/templates/project-shared.mjml index 23bfc4acf8f..c90608b3491 100644 --- a/packages/cli/src/user-management/email/templates/project-shared.mjml +++ b/packages/cli/src/user-management/email/templates/project-shared.mjml @@ -1,20 +1,15 @@ - - + - You have been added to the {{ projectName }} project as {{ role }} - - - - - This gives you access to all the workflows and credentials in that project + + + You have been added to the {{ projectName }} project as {{ role }} + + This gives you access to all the workflows and credentials in that project. View project + diff --git a/packages/cli/src/user-management/email/templates/user-invited.mjml b/packages/cli/src/user-management/email/templates/user-invited.mjml index 3bab5a1867c..ae99166c23b 100644 --- a/packages/cli/src/user-management/email/templates/user-invited.mjml +++ b/packages/cli/src/user-management/email/templates/user-invited.mjml @@ -1,17 +1,14 @@ - - + - Welcome to n8n! 🎉 - - - - - You have been invited to join n8n at {{domain}} . + + Welcome to n8n! 🎉 + You have been invited to join n8n at {{domain}}. To accept, please click the button below. - Set up your n8n account + Set up your n8n account + diff --git a/packages/cli/src/user-management/email/templates/workflow-shared.mjml b/packages/cli/src/user-management/email/templates/workflow-shared.mjml index 4998a7a2401..4d5fd168aa1 100644 --- a/packages/cli/src/user-management/email/templates/workflow-shared.mjml +++ b/packages/cli/src/user-management/email/templates/workflow-shared.mjml @@ -1,17 +1,14 @@ - - - - A workflow has been shared with you - - - + + + A workflow has been shared with you "{{ workflowName }}" workflow has been shared with you. To access it, please click the button below. Open Workflow + diff --git a/packages/cli/src/user-management/email/user-management-mailer.ts b/packages/cli/src/user-management/email/user-management-mailer.ts index 764b8195ea8..99909cfd061 100644 --- a/packages/cli/src/user-management/email/user-management-mailer.ts +++ b/packages/cli/src/user-management/email/user-management-mailer.ts @@ -102,7 +102,7 @@ export class UserManagementMailer { return await this.mailer!.sendMail({ emailRecipients: recipient.email, subject: subjectBuilder(), - body: populateTemplate(templateData), + body: populateTemplate({ ...this.basePayload, ...templateData }), }); }); @@ -245,6 +245,8 @@ export class UserManagementMailer { private get basePayload() { const baseUrl = this.urlService.getInstanceBaseUrl(); const domain = new URL(baseUrl).hostname; - return { baseUrl, domain }; + const currentYear = new Date().getFullYear(); + + return { baseUrl, domain, currentYear }; } }