| // Copyright 2014 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package multipart_test | |
| import ( | |
| "fmt" | |
| "io" | |
| "log" | |
| "mime" | |
| "mime/multipart" | |
| "net/mail" | |
| "strings" | |
| ) | |
| func ExampleNewReader() { | |
| msg := &mail.Message{ | |
| Header: map[string][]string{ | |
| "Content-Type": {"multipart/mixed; boundary=foo"}, | |
| }, | |
| Body: strings.NewReader( | |
| "--foo\r\nFoo: one\r\n\r\nA section\r\n" + | |
| "--foo\r\nFoo: two\r\n\r\nAnd another\r\n" + | |
| "--foo--\r\n"), | |
| } | |
| mediaType, params, err := mime.ParseMediaType(msg.Header.Get("Content-Type")) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| if strings.HasPrefix(mediaType, "multipart/") { | |
| mr := multipart.NewReader(msg.Body, params["boundary"]) | |
| for { | |
| p, err := mr.NextPart() | |
| if err == io.EOF { | |
| return | |
| } | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| slurp, err := io.ReadAll(p) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| fmt.Printf("Part %q: %q\n", p.Header.Get("Foo"), slurp) | |
| } | |
| } | |
| // Output: | |
| // Part "one": "A section" | |
| // Part "two": "And another" | |
| } | |