diff --git a/bin/evening_detective_server b/bin/evening_detective_server index d957d0f..5638a27 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 f9ccbc4..1fe23c4 100644 --- a/internal/services/users_service/emails.go +++ b/internal/services/users_service/emails.go @@ -42,15 +42,15 @@ func welcomePlain(username, email, password, loginURL string) string { // welcomeHTML возвращает HTML-версию письма о регистрации. func welcomeHTML(username, email, password, loginURL string) string { var content strings.Builder - content.WriteString("

Привет, ") + content.WriteString("

Привет, ") content.WriteString(html.EscapeString(username)) content.WriteString("!

\n") - content.WriteString("

Твоя регистрация в «Вечернем детективе» прошла. Данные для входа:

\n") + content.WriteString("

Твоя регистрация в «Вечернем детективе» прошла. Данные для входа:

\n") content.WriteString(credentialsBlockHTML(email, password)) if loginURL != "" { content.WriteString(buttonHTML(loginURL, "Войти в игру")) } - content.WriteString("

Если ты не регистрировался — просто проигнорируй это письмо.

") + content.WriteString("

Если ты не регистрировался — просто проигнорируй это письмо.

") return wrapHTML(content.String(), loginURL) } @@ -80,16 +80,16 @@ func resetPlain(username, email, password, loginURL string) string { // resetHTML возвращает HTML-версию письма о сбросе пароля. func resetHTML(username, email, password, loginURL string) string { var content strings.Builder - content.WriteString("

Привет, ") + content.WriteString("

Привет, ") content.WriteString(html.EscapeString(username)) content.WriteString("!

\n") - content.WriteString("

Ты запросил сброс пароля в «Вечернем детективе». Новый пароль для входа:

\n") + content.WriteString("

Ты запросил сброс пароля в «Вечернем детективе». Новый пароль для входа:

\n") content.WriteString(credentialsBlockHTML(email, password)) if loginURL != "" { content.WriteString(buttonHTML(loginURL, "Войти в игру")) } - content.WriteString("

Никому не сообщай пароль и не пересылай это письмо.

\n") - content.WriteString("

Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.

") + content.WriteString("

Никому не сообщай пароль и не пересылай это письмо.

\n") + content.WriteString("

Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.

") return wrapHTML(content.String(), loginURL) } @@ -106,11 +106,11 @@ func greeting(username string) string { // credentialsBlockHTML — блок «Логин / Пароль» в табличной вёрстке, // совместимой с Gmail. func credentialsBlockHTML(email, password string) string { - return ` - - - - + return `
Логин
` + html.EscapeString(email) + `
Пароль
` + html.EscapeString(password) + `
+ + + +
` } @@ -118,77 +118,58 @@ func credentialsBlockHTML(email, password string) string { func buttonHTML(link, label string) string { return ` -
-` + html.EscapeString(label) + ` +
` } -// wrapHTML — каркас письма: тёмная шапка с названием сервиса, контент, -// подвал. Основное оформление — inline; при блокировке текстур и шрифта -// остаются светлый фон и системный шрифт. +// wrapHTML — светлая палитра по умолчанию, тёмная через media query. +// Клиенты без поддержки CSS темы могут перекрашивать обычные цвета сами. func wrapHTML(content, baseURL string) string { return ` - - + + - - + +