Reading mail getting [<email.message.Message object at 0x02209970>, ...

Abdur-Rahmaan Janhangeer arj.python at gmail.com
Thu Nov 14 14:43:39 EST 2019


Greetings,

Using this code to read mail. I'm printing to file only mails sent by some
people. For some mails i get the body as the below instead of actual text:

[<email.message.Message object at 0x02209970>, <email.message.Message
object at 0x021ECB30>]

instead of the actual mail body.

Here is the code:

#
#
import imaplib
import email
import time

my_senders = ['you at x.com ', 'you at y.com', 'you at z.com']
my_mail_count = 1
open('data.txt', 'w+')
def read_email_from_gmail():
    global my_mail_count, my_senders

    mail = imaplib.IMAP4_SSL('imap.gmail.com')
    mail.login('mymail at gmail.com','password')
    mail.select('inbox')

    result, data = mail.search(None, 'ALL')
    mail_ids = data[0]

    id_list = mail_ids.split()
    first_email_id = int(id_list[0])
    latest_email_id = int(id_list[-1])

    for i in range(latest_email_id,first_email_id, -1):
      #pypi  # need str(i)
        result, data = mail.fetch(str(i), '(RFC822)' )

        for response_part in data:
            if isinstance(response_part, tuple):
                # from_bytes, not from_string
                msg = email.message_from_bytes(response_part[1])

                email_subject = msg['subject']
                email_from = msg['from']
                print ('{} {}'.format(my_mail_count, email_subject))
                print('        {}'.format(email_from))
                my_mail_count += 1

                #email_body = msg.get_payload(decode=True)

                for m in my_senders:
                    if m in email_from:
                        if msg.is_multipart():
                            for part in msg.get_payload():
                                print(msg.get_payload(),
file=open('data.txt', 'a'))
                                if isinstance(msg.get_payload(), list):
                                    print(dir(msg.get_payload()[0]))
                        else:
                            print(msg.get_payload(), file=open('data.txt',
'a'))
                            if isinstance(msg.get_payload(), list):
                                    print(dir(msg.get_payload()[0]))

read_email_from_gmail()
#
#

Any idea?

Yours,

Abdur-Rahmaan Janhangeer
pythonmembers.club <http://www.pythonmembers.club/> | github
<https://github.com/Abdur-rahmaanJ>
Mauritius


More information about the Python-list mailing list