diff --git a/src/lib/email.ts b/src/lib/email.ts index 24295f6..9f29caa 100644 --- a/src/lib/email.ts +++ b/src/lib/email.ts @@ -6,35 +6,84 @@ function getResend() { const FROM = process.env.EMAIL_FROM ?? "noreply@mailsend.second-brain.ru"; const BASE_URL = process.env.BETTER_AUTH_URL ?? "https://school.second-brain.ru"; +// ── HTML template (inline styles for maximum email client compatibility) ─────── + function base(content: string) { return ` - +
- + + +Second Brain · Образовательная платформа
+
+
+
|
+
| + ${label} → + | +
|
+ ${text.replace(/\n/g, " |
+
Привет, ${name}!
-Вам открыт доступ к курсу «${courseTitle}».
-Перейдите на платформу чтобы начать обучение:
- Перейти к курсам → +Привет, ${name}!
+Вам открыт доступ к курсу «${courseTitle}».
+Перейдите на платформу чтобы начать обучение:
+ ${btn(`${BASE_URL}/dashboard`, "Перейти к курсам")} `), }).catch((e) => console.error("[email] sendCourseAccessEmail:", e)); } @@ -63,10 +112,10 @@ export async function sendHomeworkSubmittedEmail( to, subject: `Новая работа на проверку — ${lessonTitle}`, html: base(` -Привет, ${curatorName}!
-Студент ${studentName} сдал работу по уроку «${lessonTitle}».
-Откройте работу чтобы проверить и оставить фидбек:
- Проверить работу → +Привет, ${curatorName}!
+Студент ${studentName} сдал работу по уроку «${lessonTitle}».
+Откройте работу чтобы проверить и оставить фидбек:
+ ${btn(`${BASE_URL}/curator/homework/${submissionId}`, "Проверить работу")} `), }).catch((e) => console.error("[email] sendHomeworkSubmittedEmail:", e)); } @@ -83,13 +132,11 @@ export async function sendFeedbackReceivedEmail( to, subject: `Получен фидбек по уроку «${lessonTitle}»`, html: base(` -Привет, ${studentName}!
-Куратор проверил вашу работу по уроку «${lessonTitle}» и оставил обратную связь:
-Вернитесь к уроку чтобы увидеть полный фидбек:
- Открыть урок → +Привет, ${studentName}!
+Куратор проверил вашу работу по уроку «${lessonTitle}» и оставил обратную связь:
+ ${quote(feedbackText)} +Вернитесь к уроку чтобы увидеть полный фидбек:
+ ${btn(lessonUrl, "Открыть урок")} `), }).catch((e) => console.error("[email] sendFeedbackReceivedEmail:", e)); } @@ -100,10 +147,25 @@ export async function sendWelcomeEmail(to: string, name: string) { to, subject: "Добро пожаловать в Second Brain", html: base(` -Привет, ${name}!
-Ваш аккаунт на образовательной платформе Second Brain подтверждён.
-После того как администратор откроет вам доступ к курсу, вы получите письмо и сможете начать обучение.
- Перейти на платформу → +Привет, ${name}!
+Ваш аккаунт на образовательной платформе Second Brain подтверждён.
+После того как администратор откроет вам доступ к курсу, вы получите письмо и сможете начать обучение.
+ ${btn(`${BASE_URL}/dashboard`, "Перейти на платформу")} `), }).catch((e) => console.error("[email] sendWelcomeEmail:", e)); } + +export async function sendTestEmail(to: string) { + await getResend().emails.send({ + from: FROM, + to, + subject: "Тест — Second Brain LMS", + html: base(` +Привет!
+Это тестовое письмо от платформы Second Brain LMS.
+Так будут выглядеть все уведомления — доступ к курсу, фидбек по ДЗ и другие.
+Если письмо отображается корректно, значит email-уведомления настроены и работают.
+ ${btn(`${BASE_URL}/dashboard`, "Открыть платформу")} + `), + }).catch((e) => console.error("[email] sendTestEmail:", e)); +}