Почта: поле «Проверочное письмо — кому» вернулось — по умолчанию администратор системы, можно указать свой адрес

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-10-06 22:51:29 +03:00
parent 4593a72cec
commit c4fb0d9bfc
4 changed files with 55 additions and 12 deletions
+20 -2
View File
@@ -1042,6 +1042,7 @@ func (h *setupHandlers) saveAlertsSMTP(w http.ResponseWriter, r *http.Request) {
Password: pickStr(r.FormValue("password"), a.SMTP.Password), // пароль в страницу не выводится: пусто — прежний
From: strings.TrimSpace(r.FormValue("from")),
To: a.SMTP.To, // адрес администратора системы — в «Кому писать» (notifyGroupsCard)
TestTo: smtpTestTo(r, a.SMTP),
LastMsg: a.SMTP.LastMsg,
LastAt: a.SMTP.LastAt,
}
@@ -1052,6 +1053,20 @@ func (h *setupHandlers) saveAlertsSMTP(w http.ResponseWriter, r *http.Request) {
setupFlash(w, r, "Настройки SMTP сохранены")
}
// smtpTestTo — адрес проверочного письма из формы «Почта»; совпадает с адресом администратора — не храним отдельно
// (поле показывает его по умолчанию), поля в запросе нет — прежний.
func smtpTestTo(r *http.Request, s SMTPSettings) string {
_ = r.ParseForm()
if _, ok := r.Form["test_to"]; !ok {
return s.TestTo
}
v := strings.TrimSpace(r.FormValue("test_to"))
if v == strings.TrimSpace(s.To) {
return ""
}
return v
}
// testAlertsSMTP шлёт пробное письмо по текущим (сохранённым) настройкам.
func (h *setupHandlers) testAlertsSMTP(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
@@ -1060,8 +1075,11 @@ func (h *setupHandlers) testAlertsSMTP(w http.ResponseWriter, r *http.Request) {
}
cfg := h.rc.Snapshot()
a := cfg.Alerts
// кому: администратор системы, а пока его адреса нет — все адреса отделов из «Кому писать»
// кому: адрес из поля «Проверочное письмо — кому», иначе администратор системы, а пока его адреса нет —
// все адреса отделов из «Кому писать»
a.SMTP.TestTo = smtpTestTo(r, a.SMTP)
test := a.SMTP
test.To = pickStr(a.SMTP.TestTo, a.SMTP.To)
if strings.TrimSpace(test.To) == "" {
var all []string
for _, k := range notifyKinds {
@@ -1070,7 +1088,7 @@ func (h *setupHandlers) testAlertsSMTP(w http.ResponseWriter, r *http.Request) {
test.To = mergeEmails(all...)
}
if strings.TrimSpace(test.To) == "" {
setupFlash(w, r, "Проверка SMTP: укажите хотя бы один адрес в блоке «Кому писать» и сохраните")
setupFlash(w, r, "Проверка SMTP: укажите, куда отправить проверочное письмо")
return
}
err := sendSMTP(test, "[bj] Проверка уведомлений", "Это проверочное письмо от bj-server. Если вы его получили — SMTP-канал оповещений работает.")