| // 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" |
| } |