github.com/geraldss/go/src@v0.0.0-20210511222824-ac7d0ebfc235/mime/multipart/example_test.go (about) 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 5 package multipart_test 6 7 import ( 8 "fmt" 9 "io" 10 "log" 11 "mime" 12 "mime/multipart" 13 "net/mail" 14 "strings" 15 ) 16 17 func 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 }