aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/email/parser.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-10-15 14:25:52 +0200
committerAleksandr Nogikh <nogikh@google.com>2025-10-15 12:38:18 +0000
commit19568248c8bdb031004760d49df5045a85aa517b (patch)
tree4b3fc19c354b5a95c8cb1baab0dc35bf3adf89a8 /pkg/email/parser.go
parent82df6b00ffc5014c260a28083893a8a0498bcdd3 (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.go12
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
+}