diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-10-15 14:25:52 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-10-15 12:38:18 +0000 |
| commit | 19568248c8bdb031004760d49df5045a85aa517b (patch) | |
| tree | 4b3fc19c354b5a95c8cb1baab0dc35bf3adf89a8 /pkg/email/parser.go | |
| parent | 82df6b00ffc5014c260a28083893a8a0498bcdd3 (diff) | |
pkg/email: decode rfc2047 subjects
It's not done transparently by the email library.
Add a test that verifies the result.
Diffstat (limited to 'pkg/email/parser.go')
| -rw-r--r-- | pkg/email/parser.go | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/pkg/email/parser.go b/pkg/email/parser.go index 6db3d2415..7c776ec72 100644 --- a/pkg/email/parser.go +++ b/pkg/email/parser.go @@ -137,7 +137,7 @@ func Parse(r io.Reader, ownEmails, goodLists, domains []string) (*Email, error) return nil, err } bodyStr := string(body) - subject := msg.Header.Get("Subject") + subject := decodeSubject(msg.Header.Get("Subject")) var cmds []*SingleCommand var patch string if !fromMe { @@ -565,3 +565,13 @@ func RemoveFromEmailList(list []string, toRemove string) []string { } return result } + +// Decode RFC 2047-encoded subjects. +func decodeSubject(rawSubject string) string { + decoder := new(mime.WordDecoder) + decodedSubject, err := decoder.DecodeHeader(rawSubject) + if err != nil { + return rawSubject + } + return decodedSubject +} |
