Python poplib: retrieving body of the email result to NONE

1.9k Views Asked by At

I can get the subject of the email however the body always result to NONE. Tried following this link but all the suggestions end up the same. The body still prints as NONE.

import poplib
from email import parser
pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('my_email.com')
pop_conn.pass_('my_password')
#Get messages from server:
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ['\n'.join(map(bytes.decode, mssg[1])) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]

for message in messages:
    print (message['subject'])
    print (message['body'])
    print (message.get_payload())
pop_conn.quit()
1

There are 1 best solutions below

0
lu_laude On
import poplib
from email import parser
pop_conn = poplib.POP3_SSL('pop.gmail.com')
pop_conn.user('my_email.com')
pop_conn.pass_('my_password')
#Get messages from server:
messages = [pop_conn.retr(i) for i in range(1, len(pop_conn.list()[1]) + 1)]
# Concat message pieces:
messages = ['\n'.join(map(bytes.decode, mssg[1])) for mssg in messages]
#Parse message intom an email object:
messages = [parser.Parser().parsestr(mssg) for mssg in messages]

for message in messages:
    print (message['subject'])
    print (message['from'])
    for part in message.walk():
        if part.get_content_type():
            body = part.get_payload(decode=True)
            print(body)
pop_conn.quit()

This did the trick. However it prints a straight line. Anybody know how to print per line if the body of the message is long?