package mailparser import ( "net/mail" "strings" ) // Display only: Return-Path is sender-controlled and must never drive access decisions. func ForwardedVia(pm *ParsedMail) string { if pm == nil { return "" } rp := normalizeAddress(pm.ReturnPath) if rp == "" || rp == normalizeAddress(pm.From) { return "" } for _, list := range [][]string{pm.To, pm.CC, pm.BCC, pm.DeliveryAddresses} { for _, a := range list { if normalizeAddress(a) == rp { return rp } } } return "" } func normalizeAddress(s string) string { s = strings.TrimSpace(s) if s == "" || s == "<>" { return "" } if a, err := mail.ParseAddress(s); err == nil { return strings.ToLower(strings.TrimSpace(a.Address)) } return strings.ToLower(strings.Trim(s, "<>")) }