package mailstuff import ( "bytes" "io" "net/mail" ) func ReadMBox(r io.Reader) ([]*mail.Message, error) { rest, err := io.ReadAll(r) if err != nil { return nil, err } const terminator = "\nFrom " var parts [][]byte for { pos := bytes.Index(rest, []byte(terminator)) if pos < 0 { parts = append(parts, rest) break } parts = append(parts, rest[:pos+1]) rest = rest[pos+1:] } ret := make([]*mail.Message, len(parts)) for i := range len(parts) { msg, err := mail.ReadMessage(bytes.NewReader(parts[i])) if err != nil { return nil, err } ret[i] = msg } return ret, nil }