Search code examples
pythonpython-3.ximap

Not able to get gmail body inner text using imap in Python 3.6 +


I wrote the code below for my script:

import sys
import imaplib
import getpass
import email
import email.header
import datetime
EMAIL_ACCOUNT = "notatallawhistleblowerIswear@gmail.com" 
EMAIL_FOLDER = "INBOX"   

def process_mailbox(M):       
    rv, data = M.search(None, "ALL")
    if rv != 'OK':
        print("No messages found!")
        return

    for num in data[0].split():
        rv, data = M.fetch(num, '(RFC822)')
        if rv != 'OK':
            print("ERROR getting message", num)
            return

        msg = email.message_from_bytes(data[0][1])
        hdr = email.header.make_header(email.header.decode_header(msg['Subject']))
        subject = str(hdr)
        print('Message %s: %s' % (num, subject))
        print('Raw Date:', msg['Date'])
        # Now convert to local date-time
        date_tuple = email.utils.parsedate_tz(msg['Date'])
        if date_tuple:
            local_date = datetime.datetime.fromtimestamp(
                email.utils.mktime_tz(date_tuple))
            print ("Local Date:", \
                local_date.strftime("%a, %d %b %Y %H:%M:%S"))   

M = imaplib.IMAP4_SSL('imap.gmail.com')   

    rv, data = M.login(EMAIL_ACCOUNT, getpass.getpass())  

print(rv, data)    
rv, mailboxes = M.list()    
rv, data = M.select(EMAIL_FOLDER)  
    print("Processing mailbox...\n")
    process_mailbox(M)
    M.close()  

M.logout()

I am not able to fetch a gmail body using IMAP. I am successfully getting the subject name and from the email using IMAP.

How can I read the gmail body text?


Solution

  • Try:

       msg = email.message_from_string(data[0][1])
       print(msg['From'])
       print(msg.get_payload(decode=True))
    

    Also can check out: Python : How to parse the Body from a raw email , given that raw email does not have a "Body" tag or anything