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: {