diff --git a/backend/internal/notification/security_template.go b/backend/internal/notification/security_template.go index dc731e3..a06b296 100644 --- a/backend/internal/notification/security_template.go +++ b/backend/internal/notification/security_template.go @@ -4,31 +4,11 @@ import "strings" func buildSecurityHTML(code string) string { var builder strings.Builder - builder.WriteString(` - - - -
-
-
-
SCERT 证书管理服务
-

超级管理员密码重置验证

-
-
-

有人正在部署服务器上重置 Scert 超级管理员密码。

-
-
本次验证码
-
`) + beginHTMLMail(&builder, "邮箱验证码") + builder.WriteString(`

您好,有人正在请求重置 Scert 超级管理员密码。

`) + builder.WriteString(`
本次验证码
`) builder.WriteString(escapeHTML(code)) - builder.WriteString(`
-
-

请在服务器本机重置终端输入。验证码仅在当前本机重置会话中有效,有效期不超过两分钟。

-
如果不是您本人操作,请勿提供此验证码,并检查服务器访问权限。
-
-
此邮件由 Scert 自动发送,请勿直接回复。
-
-
- -`) + builder.WriteString(`

请在服务器本机重置终端中输入。验证码仅在当前本机重置会话中有效,有效期不超过两分钟。

如果不是您本人操作,请勿提供此验证码,并检查服务器访问权限。
`) + endHTMLMail(&builder) return builder.String() } diff --git a/backend/internal/notification/template.go b/backend/internal/notification/template.go index 6072820..11c227f 100644 --- a/backend/internal/notification/template.go +++ b/backend/internal/notification/template.go @@ -108,15 +108,12 @@ func buildTextMail(content mailContent) string { func buildHTMLMail(content mailContent) string { var builder strings.Builder - builder.WriteString(``) - builder.WriteString(`
`) - builder.WriteString(`
SCERT 证书管理服务
证书管理通知
`) - builder.WriteString(`
`) + beginHTMLMail(&builder, "证书管理通知") builder.WriteString(`
` + escapeHTML(content.status) + `
`) - builder.WriteString(`

` + escapeHTML(content.statusSummary) + `

`) - builder.WriteString(`

` + escapeHTML(content.domain) + `

`) + builder.WriteString(`

` + escapeHTML(content.statusSummary) + `

`) + builder.WriteString(`

` + escapeHTML(content.domain) + `

`) - builder.WriteString(``) + builder.WriteString(`
`) writeHTMLField(&builder, "任务类型", content.title) writeHTMLField(&builder, "域名", content.domain) if len(content.domains) > 0 { @@ -131,31 +128,42 @@ func buildHTMLMail(content mailContent) string { builder.WriteString(`
`) if content.problem != "" { - builder.WriteString(`
问题概述
` + escapeHTML(content.problem) + `
`) + builder.WriteString(`
问题概述
` + escapeHTML(content.problem) + `
`) } if content.hasDeployment { - builder.WriteString(`
部署概况
` + escapeHTML(deploymentSummary(content.deployment)) + `
`) + builder.WriteString(`
部署概况
` + escapeHTML(deploymentSummary(content.deployment)) + `
`) } if content.recoveryWarning != "" { - builder.WriteString(`
` + escapeHTML(content.recoveryWarning) + `
`) + builder.WriteString(`
` + escapeHTML(content.recoveryWarning) + `
`) } if content.includeDeployment && len(content.deployment.Results) > 0 { - builder.WriteString(`
处理结果
`) + builder.WriteString(`
处理结果
`) for _, result := range content.deployment.Results { color := resultColor(result.Status) - builder.WriteString(`
` + escapeHTML(result.Server) + ` · ` + escapeHTML(resultStatus(result.Status)) + `
` + escapeHTML(resultSummary(result.Message)) + `
`) + builder.WriteString(`
` + escapeHTML(result.Server) + ` · ` + escapeHTML(resultStatus(result.Status)) + `
` + escapeHTML(resultSummary(result.Message)) + `
`) } builder.WriteString(`
`) } if content.managementURL != "" { - builder.WriteString(`
打开管理后台
`) + builder.WriteString(`
打开管理后台
`) } - builder.WriteString(`
此邮件由 Scert 自动发送,请勿直接回复。
`) + endHTMLMail(&builder) return builder.String() } +func beginHTMLMail(builder *strings.Builder, title string) { + builder.WriteString(``) + builder.WriteString(`
`) + builder.WriteString(`

` + escapeHTML(title) + `

`) + builder.WriteString(`
`) +} + +func endHTMLMail(builder *strings.Builder) { + builder.WriteString(`
此邮件由 Scert 自动发送,请勿直接回复。
`) +} + func writeHTMLField(builder *strings.Builder, label, value string) { - builder.WriteString(`` + escapeHTML(label) + `` + escapeHTML(value) + ``) + builder.WriteString(`` + escapeHTML(label) + `` + escapeHTML(value) + ``) } func mailStatusColor(status string) string { diff --git a/backend/internal/notification/template_safety_test.go b/backend/internal/notification/template_safety_test.go index 3cb3db1..798bc28 100644 --- a/backend/internal/notification/template_safety_test.go +++ b/backend/internal/notification/template_safety_test.go @@ -126,9 +126,11 @@ func TestAllMailTemplatesHaveValidBodyStyles(t *testing.T) { t.Fatal(err) } assertMailBodyStyle(t, payload.HTML) + assertReferenceMailStyle(t, payload.HTML) } } assertMailBodyStyle(t, buildSecurityHTML("01234567")) + assertReferenceMailStyle(t, buildSecurityHTML("01234567")) if strings.Contains(buildSecurityHTML(``), "