fix email

This commit is contained in:
2026-09-15 04:50:27 +07:00
parent 30bb456eef
commit 5a7c846025
4 changed files with 36 additions and 16 deletions
+16 -13
View File
@@ -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("<p>Привет, <strong>")
content.WriteString("<p style=\"color:#211a14;\">Привет, <strong>")
content.WriteString(html.EscapeString(username))
content.WriteString("</strong>!</p>\n")
content.WriteString("<p>Твоя регистрация в «Вечернем детективе» прошла. Данные для входа:</p>\n")
content.WriteString("<p style=\"color:#211a14;\">Твоя регистрация в «Вечернем детективе» прошла. Данные для входа:</p>\n")
content.WriteString(credentialsBlockHTML(email, password))
if loginURL != "" {
content.WriteString(buttonHTML(loginURL, "Войти в игру"))
}
content.WriteString("<p style=\"color:black; font-size:13px;\">Если ты не регистрировался — просто проигнорируй это письмо.</p>")
content.WriteString("<p style=\"color:#211a14; font-size:13px;\">Если ты не регистрировался — просто проигнорируй это письмо.</p>")
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("<p>Привет, <strong>")
content.WriteString("<p style=\"color:#211a14;\">Привет, <strong>")
content.WriteString(html.EscapeString(username))
content.WriteString("</strong>!</p>\n")
content.WriteString("<p>Ты запросил сброс пароля в «Вечернем детективе». Новый пароль для входа:</p>\n")
content.WriteString("<p style=\"color:#211a14;\">Ты запросил сброс пароля в «Вечернем детективе». Новый пароль для входа:</p>\n")
content.WriteString(credentialsBlockHTML(email, password))
if loginURL != "" {
content.WriteString(buttonHTML(loginURL, "Войти в игру"))
}
content.WriteString("<p>Никому не сообщай пароль и не пересылай это письмо.</p>\n")
content.WriteString("<p style=\"color:black; font-size:13px;\">Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.</p>")
content.WriteString("<p style=\"color:#211a14;\">Никому не сообщай пароль и не пересылай это письмо.</p>\n")
content.WriteString("<p style=\"color:#211a14; font-size:13px;\">Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.</p>")
return wrapHTML(content.String(), loginURL)
}
@@ -107,10 +107,10 @@ func greeting(username string) string {
// совместимой с Gmail.
func credentialsBlockHTML(email, password string) string {
return `<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:24px 0; border-top:1px dashed black; border-bottom:1px dashed black; table-layout:fixed;">
<tr><td style="padding:16px 0 4px; font-family:Arial,Helvetica,sans-serif; font-size:12px; color:black;">Логин</td></tr>
<tr><td style="padding:0 0 16px; font-size:16px; color:black; overflow-wrap:anywhere; word-break:break-all;">` + html.EscapeString(email) + `</td></tr>
<tr><td style="padding:16px 0 4px; border-top:1px dashed black; font-family:Arial,Helvetica,sans-serif; font-size:12px; color:black;">Пароль</td></tr>
<tr><td style="padding:0 0 16px; font-size:20px; color:black; overflow-wrap:anywhere; word-break:break-all;"><strong>` + html.EscapeString(password) + `</strong></td></tr>
<tr><td style="padding:16px 0 4px; font-family:Arial,Helvetica,sans-serif; font-size:12px; color:#211a14;">Логин</td></tr>
<tr><td style="padding:0 0 16px; font-size:16px; color:#211a14; overflow-wrap:anywhere; word-break:break-all;">` + html.EscapeString(email) + `</td></tr>
<tr><td style="padding:16px 0 4px; border-top:1px dashed black; font-family:Arial,Helvetica,sans-serif; font-size:12px; color:#211a14;">Пароль</td></tr>
<tr><td style="padding:0 0 16px; font-size:20px; color:#211a14; overflow-wrap:anywhere; word-break:break-all;"><strong>` + html.EscapeString(password) + `</strong></td></tr>
</table>`
}
@@ -127,14 +127,17 @@ func buttonHTML(link, label string) string {
// wrapHTML — каркас письма: тёмная шапка с названием сервиса, контент,
// подвал. Основное оформление — inline; при блокировке текстур и шрифта
// остаются фон bisque и системный шрифт.
// остаются светлый фон и системный шрифт.
func wrapHTML(content, baseURL string) string {
return `<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="color-scheme" content="light">
<meta name="supported-color-schemes" content="light">
<style>
:root { color-scheme:light; supported-color-schemes:light; }
@font-face { font-family:'font_old_typer'; src:url('` + emailAssetURL(baseURL, "a_OldTyper.ttf") + `') format('truetype'); }
a:hover { color:#63e2b7 !important; }
</style>
@@ -149,7 +152,7 @@ a:hover { color:#63e2b7 !important; }
</td>
</tr>
<tr>
<td style="padding:16px; background-color:bisque; background-image:url('` + emailAssetURL(baseURL, "paper.jpg") + `'); background-size:cover; border-radius:5px; box-shadow:0 0 5px black; color:black; font-family:'font_old_typer','Courier New',serif; font-size:18px; line-height:1.5; font-weight:400;">
<td bgcolor="#f4e4cc" style="padding:16px; background-color:#f4e4cc; background-image:url('` + emailAssetURL(baseURL, "paper.jpg") + `'); background-size:cover; border-radius:5px; box-shadow:0 0 5px black; color:#211a14; font-family:'font_old_typer','Courier New',serif; font-size:18px; line-height:1.5; font-weight:400;">
` + content + `
</td>
</tr>