title: Python imaplib fetch body emails gmail
body: <p>I <a href="https://stackoverflow.com/questions/348630/how-can-i-download-all-emails-with-attachments-from-gmail?lq=1">read this already</a> and wrote this script to fetch body for emails in some mail box which title begins with '$' and is sent by some sender.</p>
  
  <pre><code>import email, getpass, imaplib, os
  
  detach_dir = "F:\PYTHONPROJECTS" # where you will save attachments
  user = raw_input("Enter your GMail username --&gt; ")
  pwd = getpass.getpass("Enter your password --&gt; ")
  
  # connect to the gmail imap server
  m = imaplib.IMAP4_SSL("imap.gmail.com")
  m.login(user, pwd)
  
  m.select("PETROLEUM") # here you a can choose a mail box like INBOX instead
  # use m.list() to get all the mailboxes
  
  resp, items = m.search(None, '(FROM "EIA_eLists@eia.gov")')
  items = items[0].split() # getting the mails id
  
  my_msg = [] # store relevant msgs here in please
  msg_cnt = 0
  break_ = False
  for emailid in items[::-1]:
      resp, data = m.fetch(emailid, "(RFC822)")
      if ( break_ ):
          break 
      for response_part in data:
        if isinstance(response_part, tuple):
            msg = email.message_from_string(response_part[1])
            varSubject = msg['subject']
            if varSubject[0] == '$':
                msg_cnt += 1
                my_msg.append(msg)
                print msg_cnt
                print email.message_from_string(response_part[1])
                if ( msg_cnt == 5 ):
                    break_ = True 
  </code></pre>
  
  <p>if I print <code>email.message_from_string(response_part[1])</code>, I can see it contains first information (header, from, to, date...), the the full text body. But, I cannot fetch the body itself. <code>email.message_from_string(response_part[0])</code> prints mails IDS, and <code>email.message_from_string(response_part[2])</code> is out of range. <code>email.message_from_string(response_part[1][0])</code> neither is doing it.</p>
  
  <p>Thanks and regards.</p>
  
  <p>UPDATE</p>
  
  <p>Now, I can almost have body text. However, it is still spoilt by an information statement coming first. I get as a result</p>
  
  <pre><code>From nobody Tue Dec 25 11:42:58 2012
  
  US=3D$4.030
  
  EastCst=3D$4.036
  
  NewEng=3D$4.205
  
  CenAtl=3D$4.149
  
  LwrAtl=3D$3.921
  
  Midwst=3D$3.984
  
  GulfCst=3D$3.945
  
  RkyMt=3D$4.195
  
  WCst=3D$4.187
  
  CA=3D$4.268
  </code></pre>
  
  <p>and I would like to get rid of <code>From nobody Tue Dec 25 11:42:58 2012</code> which is information. I know I could parse text look for first relevant line... i know.</p>
  
  <p>The code for achieving so (to plug in my first sample) is</p>
  
  <pre><code>  if varSubject[0] == '$':
        r, d = m.fetch(emailid, "(UID BODY[TEXT])")
        msg_cnt += 1
        my_msg.append(msg)
        print email.message_from_string(d[0][1])
  </code></pre>
  
  <p>Do you have a better way (no info string) ??? More: what is the command to now fetch the date ? I know that I can do <code>varDate = msg['date']</code> where suited above, but how to just fetch day-month-year ? THANKS</p>