fix: SMTP test send JSON instead of multipart FormData (ParseForm can't read multipart)

This commit is contained in:
mirivlad 2026-06-02 00:14:52 +08:00
parent c8cdb089a6
commit fa6f988368
1 changed files with 18 additions and 9 deletions

View File

@ -1486,9 +1486,10 @@ function closeHealth(e){if(!e||e.target.id==='health-modal')document.getElementB
function testSMTP(){ function testSMTP(){
var f=document.querySelector('#smtp-modal form') var f=document.querySelector('#smtp-modal form')
var fd=new FormData(f) var fd=new FormData(f)
var obj={};for(var e of fd.entries()){obj[e[0]]=e[1]}
var r=document.getElementById('smtp-test-result') var r=document.getElementById('smtp-test-result')
r.textContent=' Тестируем...';r.style.color='#888' r.textContent=' Тестируем...';r.style.color='#888'
fetch('/admin/api/smtp/test',{method:'POST',body:fd}).then(function(r2){return r2.json()}).then(function(d){ fetch('/admin/api/smtp/test',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(obj)}).then(function(r2){return r2.json()}).then(function(d){
r.textContent=d.ok?' Тест пройден':' '+d.error r.textContent=d.ok?' Тест пройден':' '+d.error
r.style.color=d.ok?'#4ade80':'#ff6b6b' r.style.color=d.ok?'#4ade80':'#ff6b6b'
}).catch(function(e){r.textContent=' '+e;r.style.color='#ff6b6b'}) }).catch(function(e){r.textContent=' '+e;r.style.color='#ff6b6b'})
@ -1546,16 +1547,24 @@ func (s *Server) handleAdminSMTPTest(w http.ResponseWriter, r *http.Request) {
if !s.requireAdmin(w, r) { if !s.requireAdmin(w, r) {
return return
} }
if err := r.ParseForm(); err != nil { var req struct {
jsonErr(w, 400, "bad form") Host string `json:"smtp_host"`
Port string `json:"smtp_port"`
User string `json:"smtp_user"`
Pass string `json:"smtp_pass"`
From string `json:"smtp_from"`
To string `json:"test_to"`
}
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
jsonErr(w, 400, "bad json")
return return
} }
host := r.FormValue("smtp_host") host := req.Host
port := r.FormValue("smtp_port") port := req.Port
user := r.FormValue("smtp_user") user := req.User
pass := r.FormValue("smtp_pass") pass := req.Pass
from := r.FormValue("smtp_from") from := req.From
to := r.FormValue("test_to") to := req.To
if to == "" { if to == "" {
to = from to = from
} }