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
23 lines
886 B
Go
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)
|
|
}
|