aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/email/parser.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-06-18 19:45:44 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-06-18 19:45:44 +0200
commitb7d00d1e1453e66126fc5feda11aac7033b337c4 (patch)
treece7cacb62a9ac5e9a3dacc3eed9f1b3e16287484 /pkg/email/parser.go
parente79c9d2b4369454ed5a020b3e2dc6ae536afd815 (diff)
pkg/email: support quoted-printable emails
We did not handle quoted-printable because mime package handles it. But we can have a non-mime email in quoted-printable. Simply handle it always, it's not hard.
Diffstat (limited to 'pkg/email/parser.go')
-rw-r--r--pkg/email/parser.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/pkg/email/parser.go b/pkg/email/parser.go
index 0894c24e7..7916a0e0e 100644
--- a/pkg/email/parser.go
+++ b/pkg/email/parser.go
@@ -11,6 +11,7 @@ import (
"io/ioutil"
"mime"
"mime/multipart"
+ "mime/quotedprintable"
"net/mail"
"regexp"
"sort"
@@ -256,8 +257,10 @@ func parseBody(r io.Reader, headers mail.Header) (body []byte, attachments [][]b
return nil, nil, fmt.Errorf("failed to parse email header 'Content-Type': %v", err)
}
}
- // Note: mime package handles quoted-printable internally.
- if strings.ToLower(headers.Get("Content-Transfer-Encoding")) == "base64" {
+ switch strings.ToLower(headers.Get("Content-Transfer-Encoding")) {
+ case "quoted-printable":
+ r = quotedprintable.NewReader(r)
+ case "base64":
r = base64.NewDecoder(base64.StdEncoding, r)
}
disp, _, _ := mime.ParseMediaType(headers.Get("Content-Disposition"))