diff --git a/src/lib/emails/UserInvite.svelte b/src/lib/emails/UserInvite.svelte index eaac863..307aed1 100644 --- a/src/lib/emails/UserInvite.svelte +++ b/src/lib/emails/UserInvite.svelte @@ -28,15 +28,17 @@ - {m["emails.greeting"]({ name: user.name })} + {m["emails.greeting"]({ name: user.name }, { locale })} - {m["emails.userInvite.introduction"]({ tenant: tenant.longName })} + {m["emails.userInvite.introduction"]({ tenant: tenant.longName }, { locale })} - {m["emails.userInvite.action"]()} + + {m["emails.userInvite.action"]({}, { locale })} + - {m["emails.userInvite.hint"]({ expirationMinutes })} + {m["emails.userInvite.hint"]({ expirationMinutes }, { locale })} - {m["emails.userInvite.reason"]()} + {m["emails.userInvite.reason"]({}, { locale })} diff --git a/src/lib/emails/components/EmailButton.svelte b/src/lib/emails/components/EmailButton.svelte index 8823fec..e43a04c 100644 --- a/src/lib/emails/components/EmailButton.svelte +++ b/src/lib/emails/components/EmailButton.svelte @@ -1,7 +1,9 @@ -
@@ -10,7 +12,7 @@
- {m["emails.buttonAlternativeLink"]()}: {href} + {m["emails.buttonAlternativeLink"]({}, { locale })}: {href} diff --git a/src/lib/server/email/__tests__/email-system.test.ts b/src/lib/server/email/__tests__/email-system.test.ts index af5dafe..1f7b0e3 100644 --- a/src/lib/server/email/__tests__/email-system.test.ts +++ b/src/lib/server/email/__tests__/email-system.test.ts @@ -71,7 +71,7 @@ describe("Email System", () => { expect(mockSendMail).toHaveBeenCalledWith({ from: { - name: "Test App", + name: "OpenReception", address: "noreply@test.com", }, to: { @@ -291,7 +291,7 @@ describe("Email System", () => { expect(mockSendMail).toHaveBeenCalledWith({ from: { - name: "Test App", + name: "Test Organization", address: "noreply@test.com", }, to: { @@ -358,7 +358,7 @@ describe("Email System", () => { expect(mockSendMail).toHaveBeenCalledWith({ from: { - name: "Test App", + name: "Test Organization", address: "noreply@test.com", }, to: { diff --git a/src/lib/server/email/email-service.ts b/src/lib/server/email/email-service.ts index 2c57f3a..6011768 100644 --- a/src/lib/server/email/email-service.ts +++ b/src/lib/server/email/email-service.ts @@ -95,7 +95,7 @@ export async function sendTemplatedEmail( try { const rendered = await templateEngine.renderTemplate(templateType, data); - await sendEmail(recipient, rendered.subject, rendered.html, rendered.text); + await sendEmail(recipient, rendered.subject, rendered.html, rendered.text, tenant.longName); } catch (error) { console.error(`Failed to send templated email (${templateType}):`, error); throw error; @@ -153,7 +153,7 @@ export async function sendPinResetEmail( const html = renderOutputToHtml(emailRender); const text = htmlToText(html); - await sendEmail(recipient, subject, html, text); + await sendEmail(recipient, subject, html, text, tenant.longName); } /** @@ -210,7 +210,7 @@ export async function sendAppointmentReminderEmail( const html = renderOutputToHtml(emailRender); const text = htmlToText(html); - await sendEmail(recipient, subject, html, text); + await sendEmail(recipient, subject, html, text, tenant.longName); } const getRecipient = async (user: SelectClient | SelectUser) => { @@ -276,7 +276,7 @@ export async function sendAppointmentRejectedEmail( const html = renderOutputToHtml(emailRender); const text = htmlToText(html); - await sendEmail(recipient, subject, html, text); + await sendEmail(recipient, subject, html, text, tenant.longName); } /** @@ -321,7 +321,7 @@ export async function sendAppointmentCreatedEmail( const html = renderOutputToHtml(emailRender); const text = htmlToText(html); - await sendEmail(recipient, subject, html, text); + await sendEmail(recipient, subject, html, text, tenant.longName); } /** @@ -361,7 +361,7 @@ export async function sendAppointmentRequestEmail( const html = renderOutputToHtml(emailRender); const text = htmlToText(html); - await sendEmail(recipient, subject, html, text); + await sendEmail(recipient, subject, html, text, tenant.longName); } /** @@ -456,7 +456,7 @@ export async function sendConfirmationEmail( const text = htmlToText(html); // eslint-disable-next-line @typescript-eslint/no-explicit-any - await sendEmail(recipient as any, subject, html, text); + await sendEmail(recipient as any, subject, html, text, tenant.longName); } /** @@ -478,19 +478,18 @@ export async function sendUserInviteEmail( registrationUrl: string, language: Language = "en", ): Promise { - const recipient: EmailRecipient = { - email: userEmail, - name: userName, - language, - }; + const { recipient, locale } = await getRecipient({ email: userEmail, name: userName, language }); // Generate email - const subject = m["emails.userInvite.subject"]({ - tenant: tenant.longName, - }); + const subject = m["emails.userInvite.subject"]( + { + tenant: tenant.longName, + }, + { locale }, + ); const emailRender = render(UserInvite, { props: { - locale: language ?? "en", + locale, user: recipient as SelectUserEmail, tenant, confirmUrl: registrationUrl, @@ -501,7 +500,7 @@ export async function sendUserInviteEmail( const text = htmlToText(html); // eslint-disable-next-line @typescript-eslint/no-explicit-any - await sendEmail(recipient as any, subject, html, text); + await sendEmail(recipient as any, subject, html, text, tenant.longName); } /** @@ -540,5 +539,5 @@ export async function sendAppointmentCancelledEmail( const text = htmlToText(html); // eslint-disable-next-line @typescript-eslint/no-explicit-any - await sendEmail(recipient as any, subject, html, text); + await sendEmail(recipient as any, subject, html, text, tenant.longName); } diff --git a/src/lib/server/email/mailer.ts b/src/lib/server/email/mailer.ts index a526a4f..9042115 100644 --- a/src/lib/server/email/mailer.ts +++ b/src/lib/server/email/mailer.ts @@ -91,6 +91,7 @@ export async function sendEmail( subject: string, htmlContent: string, textContent: string, + tenantName?: string, ): Promise { const transporter = createTransporter(); logger.setContext("sendMail"); @@ -109,7 +110,7 @@ export async function sendEmail( const mailOptions: Mail.Options = { from: { - name: env.SMTP_FROM_NAME || "Open Reception", + name: tenantName || "OpenReception", address: from_address, }, to: {