github.com/jordwest/imap-server@v0.0.0-20200627020849-1cf758ba359f/types/rfc2822_message.go (about) 1 package types 2 3 import ( 4 "bufio" 5 "bytes" 6 "io" 7 "net/textproto" 8 ) 9 10 // RFC2822Message is a message compliant with RFC 2822. 11 type RFC2822Message struct { 12 Headers textproto.MIMEHeader 13 Body string 14 } 15 16 // MessageFromBytes creates a RFC2822Message from its byte representation. 17 func MessageFromBytes(msgBytes []byte) (msg RFC2822Message, err error) { 18 // The header and body are separated by a double new-line 19 splitMessage := bytes.SplitN(msgBytes, []byte("\r\n\r\n"), 2) 20 21 // Read the headers 22 headerReader := textproto.NewReader(bufio.NewReader(bytes.NewReader(splitMessage[0]))) 23 msg.Headers, err = headerReader.ReadMIMEHeader() 24 25 if err != nil && err != io.EOF { 26 return msg, err 27 } 28 29 if len(splitMessage) == 2 { 30 msg.Body = string(splitMessage[1]) 31 } 32 33 return msg, nil 34 }