Skip to content

Commit 484fdd8

Browse files
committed
fix: handle nested multipart/alternative, fixes #1
1 parent 0e07e0d commit 484fdd8

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

extract_body.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,16 @@ func extractBodyAsMarkdown(msg *mail.Message) (string, error) {
4848
if perr == io.EOF {
4949
break
5050
}
51+
pct := part.Header.Get("Content-Type")
52+
pcte := part.Header.Get("Content-Transfer-Encoding")
53+
ptype, pparams, _ := mime.ParseMediaType(pct)
5154
if perr != nil {
5255
return "", perr
5356
}
5457
// skip attachments
5558
if disp := strings.ToLower(part.Header.Get("Content-Disposition")); strings.HasPrefix(disp, "attachment") {
5659
continue
5760
}
58-
pct := part.Header.Get("Content-Type")
59-
pcte := part.Header.Get("Content-Transfer-Encoding")
60-
ptype, _, _ := mime.ParseMediaType(pct)
6161
switch ptype {
6262
case "text/plain":
6363
b, e := readAndDecodePart(part, pct, pcte)
@@ -71,6 +71,9 @@ func extractBodyAsMarkdown(msg *mail.Message) (string, error) {
7171
return "", e
7272
}
7373
firstHTML = string(b)
74+
case "multipart/alternative":
75+
mr = multipart.NewReader(part, pparams["boundary"])
76+
continue
7477
default:
7578
return "", errors.New("no text part found")
7679
}

main.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,26 @@ func main() {
115115
initS3()
116116
lambda.Start(handler)
117117
}
118+
119+
func debugMain() {
120+
if len(os.Args) < 2 {
121+
fmt.Println("usage: ./ticket-dispatcher <filename>")
122+
return
123+
}
124+
file, err := os.Open(os.Args[1])
125+
if err != nil {
126+
log.Fatalf("error opening file: %v", err)
127+
}
128+
defer file.Close()
129+
130+
msg, err := mail.ReadMessage(file)
131+
if err != nil {
132+
log.Fatalf("error parsing email: %v", err)
133+
}
134+
body, err := extractBodyAsMarkdown(msg)
135+
if err != nil {
136+
log.Fatalf("error extracting body: %v", err)
137+
} else {
138+
fmt.Println(body)
139+
}
140+
}

0 commit comments

Comments
 (0)