My setup uses fetchmail to pull emails from Gmail, which are processed by procmail and passed to a Python script. When I use email.message_from_string(), the resulting object is not parsed as an email object. get_payload() returns the header/body/payload text of the email as a single text blob. This is the text it returns: From example@gmail.com Sat Aug 17 19:20:44 2013 >From example Sat Aug 17 19:20:44 2013 MIME-Version: 1.0 Received: from ie-in-f109.1e100.net [74.125.142.109] by VirtualBox with IMAP (fetchmail-6.3.21) for <example@localhost> (single-drop); Sat, 17 Aug 2013 19:20:44 -0700 (PDT) Received: by 10.70.131.110 with HTTP; Sat, 17 Aug 2013 19:20:42 -0700 (PDT) Date: Sat, 17 Aug 2013 19:20:42 -0700 Delivered-To: example@gmail.com Message-ID: <CAAsp4m0GBeVg80-ryFgNvNNAj_QPguzbX3DqvMSx-xSGZM18Pw@mail.gmail.com> Subject: test 19:20 From: example <example@gmail.com> To: example <example@gmail.com> Content-Type: multipart/alternative; boundary=001a1133435474449004e42f7861 --001a1133435474449004e42f7861 Content-Type: text/plain; charset=ISO-8859-1 19:20 --001a1133435474449004e42f7861 Content-Type: text/html; charset=ISO-8859-1 <div dir="ltr">19:20</div> --001a1133435474449004e42f7861-- My code: full_msg = sys.stdin.read() msg = email.message_from_string(full_msg) msg['to'] # returns None msg.get_payload() # returns the text above What am I missing in getting Python to properly interpret the email? I see from these questions that I may not be getting the proper email headers somewhere along the line, but I cannot confirm. That > on line 2 is not a typo: it's in the text. Continue reading...