/** The Email Header is expected to follow this spec: Mail Header: Return-Path: <*****@*****.**> X-Original-To: [email protected] Delivered-To: [email protected] Received: by domain.de (Postfix, from userid 0) id 034C710090703; Sat, 16 Mar 2013 02:05:26 +0100 (CET) To: [email protected], [email protected], [...] Subject: Test Message Message-Id: <*****@*****.**> Date: Sat, _6 Mar 2013 02:05:26 +0100 (CET) From: [email protected] (root) which translates to a more generic form of: Key : Blank Value \newline */ func parseHeaderStr(header string) (*Header, error) { if 0 == len(header) { return nil, errors.New("Header string is empty") } var ( reader *textproto.Reader = textproto.NewReader(bufio.NewReader(bytes.NewBufferString(header))) mHeader textproto.MIMEHeader err error ) if mHeader, err = reader.ReadMIMEHeader(); err != nil && err != io.EOF { return nil, err } // for key, val := range mHeader { // fmt.Printf("&&&& %s -> %s\n", key, val) // } return parseMainHeaderContent(mHeader) }