diff --git a/pkg/mailparser/parser.go b/pkg/mailparser/parser.go index f40e84a..49fe6a1 100644 --- a/pkg/mailparser/parser.go +++ b/pkg/mailparser/parser.go @@ -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