1// Copyright 2014 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package multipart_test
6
7import (
8	"fmt"
9	"io"
10	"log"
11	"mime"
12	"mime/multipart"
13	"net/mail"
14	"strings"
15)
16
17func ExampleNewReader() {
18	msg := &mail.Message{
19		Header: map[string][]string{
20			"Content-Type": {"multipart/mixed; boundary=foo"},
21		},
22		Body: strings.NewReader(
23			"--foo\r\nFoo: one\r\n\r\nA section\r\n" +
24				"--foo\r\nFoo: two\r\n\r\nAnd another\r\n" +
25				"--foo--\r\n"),
26	}
27	mediaType, params, err := mime.ParseMediaType(msg.Header.Get("Content-Type"))
28	if err != nil {
29		log.Fatal(err)
30	}
31	if strings.HasPrefix(mediaType, "multipart/") {
32		mr := multipart.NewReader(msg.Body, params["boundary"])
33		for {
34			p, err := mr.NextPart()
35			if err == io.EOF {
36				return
37			}
38			if err != nil {
39				log.Fatal(err)
40			}
41			slurp, err := io.ReadAll(p)
42			if err != nil {
43				log.Fatal(err)
44			}
45			fmt.Printf("Part %q: %q\n", p.Header.Get("Foo"), slurp)
46		}
47	}
48
49	// Output:
50	// Part "one": "A section"
51	// Part "two": "And another"
52}
53