PROJ-92: forwarded_via in Suchtreffern, Detail und Threads; Badge im Portal. PROJ-93: archivmail imap-verify gleicht Message-IDs im IMAP-Postfach mit dem Archiv ab (strikt lesend, nur Zahlen und Ordner:UID). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
37 lines
767 B
Go
37 lines
767 B
Go
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, "<>"))
|
|
}
|