diff --git a/bin/evening_detective_server b/bin/evening_detective_server index f2f8cc8..27d46a4 100755 Binary files a/bin/evening_detective_server and b/bin/evening_detective_server differ diff --git a/internal/services/users_service/emails.go b/internal/services/users_service/emails.go index dd53a9a..75e76ca 100644 --- a/internal/services/users_service/emails.go +++ b/internal/services/users_service/emails.go @@ -6,15 +6,7 @@ import ( "strings" ) -// Шаблоны писем сервиса. Структура по базе знаний копирайтера (email.md): -// приветствие → контекст («почему это письмо») → ценность (данные для входа) -// → CTA → подпись → P.S. Письма транзакционные, но по форме — «человек -// человеку»: Gmail и другие почтовики агрессивнее фильтруют короткие -// «роботные» письма без структуры. -// -// Каждое письмо формируется в двух версиях: text/plain (для старых клиентов -// и фильтров) и text/html (для отображения); sender собирает их в -// multipart/alternative. +// Письма содержат текстовую и HTML-версию; sender собирает multipart/alternative. const ( // welcomeSubject — тема письма о регистрации: конкретика без КАПСА и @@ -58,7 +50,7 @@ func welcomeHTML(username, email, password, loginURL string) string { if loginURL != "" { content.WriteString(buttonHTML(loginURL, "Войти в игру")) } - content.WriteString("
Если ты не регистрировался — просто проигнорируй это письмо.
") + content.WriteString("Если ты не регистрировался — просто проигнорируй это письмо.
") return wrapHTML(content.String()) } @@ -97,7 +89,7 @@ func resetHTML(username, email, password, loginURL string) string { content.WriteString(buttonHTML(loginURL, "Войти в игру")) } content.WriteString("Никому не сообщай пароль и не пересылай это письмо.
\n") - content.WriteString("Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.
") + content.WriteString("Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.
") return wrapHTML(content.String()) } @@ -114,25 +106,20 @@ func greeting(username string) string { // credentialsBlockHTML — блок «Логин / Пароль» в табличной вёрстке, // совместимой с Gmail. func credentialsBlockHTML(email, password string) string { - return `| Логин | -` + html.EscapeString(email) + ` | -
| Пароль | -` + html.EscapeString(password) + ` | -
| Логин |
| ` + html.EscapeString(email) + ` |
| Пароль |
| ` + html.EscapeString(password) + ` |
| -` + html.EscapeString(label) + ` + | +` + html.EscapeString(label) + ` |
| - |