diff --git a/src/app/api/questions/[id]/messages/route.ts b/src/app/api/questions/[id]/messages/route.ts index 0494034..3a7577f 100644 --- a/src/app/api/questions/[id]/messages/route.ts +++ b/src/app/api/questions/[id]/messages/route.ts @@ -78,6 +78,8 @@ export async function POST( question.user.name, question.title, id, + text.trim(), + Boolean(safeFiles?.length), ); } else { const staff = await prisma.user.findMany({ diff --git a/src/lib/email.ts b/src/lib/email.ts index 628e448..0ff71a6 100644 --- a/src/lib/email.ts +++ b/src/lib/email.ts @@ -89,11 +89,19 @@ function btn(href: string, label: string) { `; } +function escapeHtml(text: string) { + return text + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """); +} + function quote(text: string) { return `
|
- ${text.replace(/\n/g, " ${escapeHtml(text).replace(/\n/g, " |
Привет, ${studentName}!
-Школа ответила на ваш вопрос:
- ${quote(questionTitle)} -Откройте тред чтобы прочитать ответ:
- ${btn(`${BASE_URL}/questions/${questionId}`, "Читать ответ")} +Школа ответила на ваш вопрос «${escapeHtml(questionTitle)}»:
+ ${quote(preview)} + ${truncated ? `Ответ длинный — целиком он в треде.
` : ""} + ${hasFiles ? `К ответу приложены файлы — открыть их можно в треде.
` : ""} +Ответить или посмотреть переписку целиком:
+ ${btn(`${BASE_URL}/questions/${questionId}`, "Открыть тред")} `, school), }).catch((e) => console.error("[email] sendQuestionReplyEmail:", e)); }