fix: Datumsparser — mehr RFC-2822-Varianten, kein time.Now() Fallback
This commit is contained in:
@@ -81,11 +81,38 @@ func Parse(raw []byte) (*ParsedMail, error) {
|
||||
msgID := msg.Header.Get("Message-Id")
|
||||
pm.MessageID = strings.Trim(msgID, "<>")
|
||||
|
||||
// Date
|
||||
// Date — try go-message parser first, then fallback formats, then zero
|
||||
if d, err := msg.Header.Date(); err == nil {
|
||||
pm.Date = d
|
||||
} else {
|
||||
pm.Date = time.Now()
|
||||
// Some MUAs emit non-standard variants (e.g. "+0100 (CET)" suffix).
|
||||
// Try common RFC 2822 / non-standard formats before giving up.
|
||||
raw := strings.TrimSpace(msg.Header.Get("Date"))
|
||||
// Strip parenthesised timezone comment: "... +0100 (CET)" → "... +0100"
|
||||
if idx := strings.LastIndex(raw, "("); idx > 0 {
|
||||
raw = strings.TrimSpace(raw[:idx])
|
||||
}
|
||||
parsed := false
|
||||
for _, layout := range []string{
|
||||
"Mon, 2 Jan 2006 15:04:05 -0700",
|
||||
"Mon, 02 Jan 2006 15:04:05 -0700",
|
||||
"2 Jan 2006 15:04:05 -0700",
|
||||
"02 Jan 2006 15:04:05 -0700",
|
||||
"Mon, 2 Jan 2006 15:04:05 MST",
|
||||
"Mon, 02 Jan 2006 15:04:05 MST",
|
||||
time.RFC1123Z,
|
||||
time.RFC1123,
|
||||
} {
|
||||
if t, err := time.Parse(layout, raw); err == nil {
|
||||
pm.Date = t
|
||||
parsed = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !parsed {
|
||||
// Leave pm.Date as zero — storage will use DB DEFAULT NOW()
|
||||
pm.Date = time.Time{}
|
||||
}
|
||||
}
|
||||
|
||||
// Parse body / MIME parts
|
||||
|
||||
Reference in New Issue
Block a user