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?
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