fix: MIME-Encoded-Word-Betreffs mit Windows-1252 werden nicht dekodiert

decodeMIMEHeader() nutzte mime.WordDecoder ohne CharsetReader. Go kennt
dort nativ nur UTF-8/US-ASCII/ISO-8859-1, alles andere (z.B.
Windows-1252) ließ DecodeHeader() scheitern, Betreff blieb roh
("=?Windows-1252?Q?...?="). CharsetReader ergänzt, nutzt dieselbe
htmlindex-Logik wie decodeCharset() für den Body (vgl. PROJ-57).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WapWkrQusDuBMhaN8WyuXB
This commit is contained in:
sysops
2026-08-06 19:22:19 +02:00
co-authored by Claude Sonnet 5
parent 2aad899dfc
commit 31d71138c9
+13 -2
View File
@@ -324,9 +324,20 @@ func decodeBody(data []byte, cte string) []byte {
return data
}
// decodeMIMEHeader decodes RFC 2047 encoded-word headers.
// decodeMIMEHeader decodes RFC 2047 encoded-word headers. Go's mime package
// only knows UTF-8/US-ASCII/ISO-8859-1 natively; CharsetReader closes that
// gap for charsets like Windows-1252 using the same htmlindex lookup as
// decodeCharset for the body.
func decodeMIMEHeader(s string) string {
dec := new(mime.WordDecoder)
dec := &mime.WordDecoder{
CharsetReader: func(charset string, input io.Reader) (io.Reader, error) {
data, err := io.ReadAll(input)
if err != nil {
return nil, err
}
return bytes.NewReader(decodeCharset(data, charset)), nil
},
}
decoded, err := dec.DecodeHeader(s)
if err != nil {
return s