From 8d950b48f7ca94f3deeb31132b72b296b2999751 Mon Sep 17 00:00:00 2001 From: sysops Date: Mon, 11 May 2026 23:46:13 +0200 Subject: [PATCH] =?UTF-8?q?fix(mailparser):=20Deutsche=20Wochentagsabk?= =?UTF-8?q?=C3=BCrzungen=20im=20Date-Header=20parsen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PMG mit German-Locale erzeugt "So, 24 Aug 2025 00:05:17 +0200" statt "Sun, ..." — Go's net/mail und alle bisherigen Fallbacks scheitern daran. Fix: Wochentag-Präfix (≤3 Zeichen vor dem ersten Komma) abschneiden und erneut mit den numerischen Offset-Formaten parsen. Co-Authored-By: Claude Sonnet 4.6 --- pkg/mailparser/parser.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pkg/mailparser/parser.go b/pkg/mailparser/parser.go index a78293f..3238d76 100644 --- a/pkg/mailparser/parser.go +++ b/pkg/mailparser/parser.go @@ -136,6 +136,30 @@ func Parse(raw []byte) (*ParsedMail, error) { break } } + if !parsed { + // Some MTAs (e.g. PMG with German locale) use localised weekday names: + // "So, 24 Aug 2025 00:05:17 +0200" instead of "Sun, 24 Aug 2025...". + // Strip the "Weekday, " prefix (≤3 chars before the first comma) and retry. + if commaIdx := strings.Index(raw, ","); commaIdx > 0 && commaIdx <= 3 { + noWeekday := strings.TrimSpace(raw[commaIdx+1:]) + for _, layout := range []string{ + "2 Jan 2006 15:04:05 -0700", + "02 Jan 2006 15:04:05 -0700", + "2 Jan 2006 15:04:05 -07:00", + "02 Jan 2006 15:04:05 -07:00", + "2 Jan 2006 15:04:05 MST", + "02 Jan 2006 15:04:05 MST", + "2 Jan 2006 15:04 -0700", + "02 Jan 2006 15:04 -0700", + } { + if t, err := time.Parse(layout, noWeekday); 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{}