generated from VLADIMIR/template
update emails
This commit is contained in:
@@ -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("<p style=\"color:#777777; font-size:13px;\">Если ты не регистрировался — просто проигнорируй это письмо.</p>")
|
||||
content.WriteString("<p style=\"color:#614a16; font-size:13px;\">Если ты не регистрировался — просто проигнорируй это письмо.</p>")
|
||||
return wrapHTML(content.String())
|
||||
}
|
||||
|
||||
@@ -97,7 +89,7 @@ func resetHTML(username, email, password, loginURL string) string {
|
||||
content.WriteString(buttonHTML(loginURL, "Войти в игру"))
|
||||
}
|
||||
content.WriteString("<p>Никому не сообщай пароль и не пересылай это письмо.</p>\n")
|
||||
content.WriteString("<p style=\"color:#777777; font-size:13px;\">Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.</p>")
|
||||
content.WriteString("<p style=\"color:#614a16; font-size:13px;\">Если это был не ты — ответь на это письмо: мы поможем защитить аккаунт.</p>")
|
||||
return wrapHTML(content.String())
|
||||
}
|
||||
|
||||
@@ -114,25 +106,20 @@ func greeting(username string) string {
|
||||
// credentialsBlockHTML — блок «Логин / Пароль» в табличной вёрстке,
|
||||
// совместимой с Gmail.
|
||||
func credentialsBlockHTML(email, password string) string {
|
||||
return `<table role="presentation" cellpadding="0" cellspacing="0" style="margin:16px 0; border:1px solid #e3ddd2; border-radius:6px; background-color:#faf8f5; width:100%;">
|
||||
<tr>
|
||||
<td style="padding:12px 16px; font-size:14px; color:#555555; width:120px;">Логин</td>
|
||||
<td style="padding:12px 16px; font-size:14px; color:#222222;"><strong>` + html.EscapeString(email) + `</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding:12px 16px; font-size:14px; color:#555555; width:120px; border-top:1px solid #e3ddd2;">Пароль</td>
|
||||
<td style="padding:12px 16px; font-size:14px; color:#1a1a2e; border-top:1px solid #e3ddd2;"><strong>` + html.EscapeString(password) + `</strong></td>
|
||||
</tr>
|
||||
return `<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="margin:24px 0; border-top:1px dashed #614a16; border-bottom:1px dashed #614a16; table-layout:fixed;">
|
||||
<tr><td style="padding:16px 0 4px; font-family:Arial,Helvetica,sans-serif; font-size:12px; color:#614a16;">Логин</td></tr>
|
||||
<tr><td style="padding:0 0 16px; font-size:16px; color:#111; overflow-wrap:anywhere; word-break:break-all;">` + html.EscapeString(email) + `</td></tr>
|
||||
<tr><td style="padding:16px 0 4px; border-top:1px dashed #614a16; font-family:Arial,Helvetica,sans-serif; font-size:12px; color:#614a16;">Пароль</td></tr>
|
||||
<tr><td style="padding:0 0 16px; font-size:20px; color:#111; overflow-wrap:anywhere; word-break:break-all;"><strong>` + html.EscapeString(password) + `</strong></td></tr>
|
||||
</table>`
|
||||
}
|
||||
|
||||
// buttonHTML — CTA-кнопка табличной вёрсткой (Gmail не поддерживает
|
||||
// margin/padding на <a>, поэтому отступы — на ячейке <td>).
|
||||
// buttonHTML — кнопка входа с inline-стилями и табличным фоном.
|
||||
func buttonHTML(link, label string) string {
|
||||
return `<table role="presentation" cellpadding="0" cellspacing="0" style="margin:20px 0;">
|
||||
<tr>
|
||||
<td style="border-radius:6px; background-color:#c9a227;">
|
||||
<a href="` + html.EscapeString(link) + `" style="display:inline-block; padding:12px 28px; color:#1a1a2e; font-weight:bold; text-decoration:none; font-size:15px; border-radius:6px;">` + html.EscapeString(label) + `</a>
|
||||
<td style="border-radius:5px; background-color:#222; border:1px solid #614a16;">
|
||||
<a href="` + html.EscapeString(link) + `" style="display:inline-block; padding:12px 28px; color:#bfa07d; font-family:Arial,Helvetica,sans-serif; font-weight:bold; text-decoration:none; font-size:15px; line-height:24px; border-radius:5px;">` + html.EscapeString(label) + `</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>`
|
||||
@@ -148,22 +135,22 @@ func wrapHTML(content string) string {
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
</head>
|
||||
<body style="margin:0; padding:0; background-color:#f4f1ec; font-family:Arial, Helvetica, sans-serif;">
|
||||
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background-color:#f4f1ec; padding:24px 0;">
|
||||
<body style="margin:0; padding:0; background-color:#111; font-family:Arial, Helvetica, sans-serif;">
|
||||
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" style="background-color:#111; padding:24px 12px;">
|
||||
<tr><td align="center">
|
||||
<table role="presentation" width="600" cellpadding="0" cellspacing="0" style="max-width:600px; width:100%; background-color:#ffffff; border-radius:8px; overflow:hidden;">
|
||||
<table role="presentation" width="600" cellpadding="0" cellspacing="0" style="max-width:600px; width:100%; background-color:#222; border:1px solid #614a16; border-radius:10px;">
|
||||
<tr>
|
||||
<td style="background-color:#1a1a2e; padding:20px 28px;">
|
||||
<span style="color:#ffffff; font-size:20px; font-weight:bold; letter-spacing:1px;">ВЕЧЕРНИЙ ДЕТЕКТИВ</span>
|
||||
<td style="background-color:#222; padding:24px; border-bottom:3px solid #614a16;">
|
||||
<span style="color:#bfa07d; font-family:'Courier New',Courier,monospace; font-size:22px; line-height:1.4; font-weight:normal;">ВЕЧЕРНИЙ ДЕТЕКТИВ</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding:28px; color:#222222; font-size:15px; line-height:1.6;">
|
||||
<td style="padding:24px; background-color:#f4ead5; color:#111; font-family:'Courier New',Courier,monospace; font-size:16px; line-height:1.7;">
|
||||
` + content + `
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding:20px 28px; background-color:#faf8f5; color:#777777; font-size:12px; line-height:1.5;">
|
||||
<td style="padding:20px 24px; background-color:#222; color:#aaa; font-size:12px; line-height:1.6; border-top:3px solid #614a16;">
|
||||
Это автоматическое письмо сервиса «Вечерний детектив».<br>
|
||||
Если ты получил его по ошибке — просто ответь на это письмо.
|
||||
</td>
|
||||
|
||||
Reference in New Issue
Block a user