From c3d3f8e677592aa32549039c43a47210be2428b0 Mon Sep 17 00:00:00 2001 From: DonVoo Date: Mon, 13 Jul 2026 12:32:14 +0200 Subject: [PATCH] Parse display-name recipients for compose send --- backend/00-router.go | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/backend/00-router.go b/backend/00-router.go index acb8512..a6e16fa 100644 --- a/backend/00-router.go +++ b/backend/00-router.go @@ -73,7 +73,11 @@ func mailSendHandler(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusBadRequest) return } - to := splitRecipients(r.FormValue("to")) + to, err := splitRecipients(r.FormValue("to")) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } subject := strings.TrimSpace(r.FormValue("subject")) body := r.FormValue("body") if len(to) == 0 { @@ -91,21 +95,27 @@ func mailSendHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "gesendet") } -func splitRecipients(value string) []string { - fields := strings.FieldsFunc(value, func(r rune) bool { - return r == ',' || r == ';' || r == '\n' || r == '\r' || r == '\t' || r == ' ' - }) - recipients := make([]string, 0, len(fields)) - seen := make(map[string]bool, len(fields)) - for _, field := range fields { - addr := strings.TrimSpace(field) - if addr == "" || seen[strings.ToLower(addr)] { +func splitRecipients(value string) ([]string, error) { + normalized := strings.NewReplacer(";", ",", "\r\n", ",", "\n", ",", "\r", ",").Replace(strings.TrimSpace(value)) + if normalized == "" { + return nil, nil + } + parsed, err := mail.ParseAddressList(normalized) + if err != nil { + return nil, fmt.Errorf("Ungueltiger Empfaenger: %s", err) + } + recipients := make([]string, 0, len(parsed)) + seen := make(map[string]bool, len(parsed)) + for _, address := range parsed { + addr := strings.TrimSpace(address.Address) + key := strings.ToLower(addr) + if addr == "" || seen[key] { continue } recipients = append(recipients, addr) - seen[strings.ToLower(addr)] = true + seen[key] = true } - return recipients + return recipients, nil } func homeHandler(w http.ResponseWriter, r *http.Request) {