Files
sysopsandClaude Sonnet 5 1dfd8c18ac feat(PROJ-84): fix-subjects CLI-Backfill für kaputte MIME-Header-Betreffs
CLI-Subkommando "archivmail fix-subjects" korrigiert Bestandsmails mit
undekodiertem RFC-2047-Encoded-Word im Betreff (Folge des Fixes in
31d7113). Dry-Run per Default, echte Änderung nur mit --apply.

Original-EML im Storage bleibt unangetastet - nur Postgres emails.subject
wird korrigiert, danach Manticore-Reindex inkl. Erhalt von OCR-Text.
Jeder Lauf erzeugt einen Audit-Log-Eintrag (metadata_backfill).

Verifiziert auf 192.168.1.132: 543 Kandidaten, 541 reparierbar, 2 zu
Recht übersprungen (RFC-2047-Verletzung im Original). --apply noch
nicht ausgeführt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WapWkrQusDuBMhaN8WyuXB
2026-08-06 19:58:41 +02:00

23 lines
886 B
Go

package mailparser
import "regexp"
// encodedWordRe matches an RFC 2047 encoded-word (=?charset?B|Q?text?=).
// Used to detect header values that were stored raw because decoding failed
// (e.g. Windows-1252 before the CharsetReader fix in decodeMIMEHeader).
var encodedWordRe = regexp.MustCompile(`=\?[^?\s]+\?[BbQq]\?[^?]*\?=`)
// HasEncodedWord reports whether s still contains an undecoded RFC 2047
// encoded-word. A correctly decoded subject never contains one.
func HasEncodedWord(s string) bool {
return encodedWordRe.MatchString(s)
}
// DecodeMIMEHeader is the exported form of decodeMIMEHeader. It decodes
// RFC 2047 encoded-word headers including charsets outside UTF-8/US-ASCII/
// ISO-8859-1 (e.g. Windows-1252). Callers outside the parser need it for
// metadata repair runs (subject backfill).
func DecodeMIMEHeader(s string) string {
return decodeMIMEHeader(s)
}