Search code examples
python-3.ximaplib

python 3.5 imaplib read gmails as plain text


mail = imaplib.IMAP4_SSL('imap.gmail.com', 993)
username = 'MyGmail@gmail.com'
password = 'MyPasswordHere'
mail.login(username, password)    
mail.select('INBOX')

typ, data = mail.search(None, 'ALL')
for num in data[0].split():
    typ, data = mail.fetch(num, '(RFC822)')
    print(data)
    exit()

This is a part of the whole output: (not very readable)

[(b'1 (BODY[1] {1115}', b'\r\nHej Bjango For at sikre, at Bjangos side hj=C3=A6lper dig med at n=C3=A5 =\r\ndine m=C3=A5l, giver vi dig her nogle hurtige og nemme forslag til, hvad =\r\ndu kan g=C3=B8re: Opdater dit profilbillede og dit coverbillede =\r\nOverf=C3=B8r=C2=A0billede Tilf=C3=B8j en beskrivelse af din side =\r\nTilf=C3=B8j=C2=A0en=C2=A0beskrivelse Medtag et link til dit website =\r\nTilf=C3=B8j=C2=A0et=C2=A0link Sl=C3=A5 en opdatering eller et billede op =\r\np=C3=A5 din side Opret=C2=A0et=C2=A0opslag Inviter dine venner til at =\r\nsynes godt om din side Inviter=C2=A0dine=C2=A0venner\r\n\r\nHilsen Facebook-teamet\r\n\r\n\r\n\r\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=\r\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\r\nDenne besked blev sendt til infobjango@gmail.com. Hvis du ikke =C3=B8nsker =\r\nat modtage disse e-mails fra Facebook fremover, skal du f=C3=B8lge =\r\nnedenst=C3=A5ende link for at afmelde dem.\r\nhttps://www.facebook.com/o.php?k=3DAS38jnuCT_H5AdZt&u=3D100015358233656&mi=\r\nd=3D548339b6125b3G5af6a3e64c38G0G37b\r\nFacebook, Inc., Attention: Community Support, 1 Hacker Way, Menlo Park, CA =\r\n94025\r\n\r\n'), b')']

So here is my question How do I make the main part of the mail I received readable?


An example of what I mean by readable:

Dear bjango

This is a mail, which is totally readable without any "<<td style=3D"font-size: 16px; =\r\npadding-bottom: 26px; text-ali>". That's funny I just made a part of this mail unreadable that was supposed to be readable - I hope you get the point.

Best Regards Bjango

This approach does not completely solve my issue with readability:

    import email
msg = email.message_from_bytes(data[0][1])
print(msg.get_payload(decode=False))

Output will be as followed:

Hej Bjango For at sikre, at Bjangos side hj=C3=A6lper dig med at n=C3=A5 =
dine m=C3=A5l, giver vi dig her nogle hurtige og nemme forslag til, hvad =
du kan g=C3=B8re:  Opdater dit profilbillede og dit coverbillede =
Overf=C3=B8r=C2=A0billede Tilf=C3=B8j en beskrivelse af din side =
Tilf=C3=B8j=C2=A0en=C2=A0beskrivelse Medtag et link til dit website =
Tilf=C3=B8j=C2=A0et=C2=A0link Sl=C3=A5 en opdatering eller et billede op =
p=C3=A5 din side Opret=C2=A0et=C2=A0opslag Inviter dine venner til at =
synes godt om din side Inviter=C2=A0dine=C2=A0venner

Hilsen Facebook-teamet
  • But none the less, it's a massive improvement

This is the email I intend to get in the output section:

Hej Bjango For at sikre, at Bjangos side hjælper dig med at nå dine mål, giver vi dig her nogle hurtige og nemme forslag til, hvad du kan gøre: Opdater dit profilbillede og dit coverbillede Overfører billeder Tilføj en beskrivelse af din side Tilføj en beskrivelse Medtag et link til dit website Tilføj et link Slå en opdatering eller et billede op på din side Opret et opslag Inviter dine venner til at synes godt om din side Inviter dine venner

Hilsen Facebook-teamet


Solution

  • Python 3 email parser should work here:

    import email
    msg = email.message_from_bytes(data[0][1])
    payload = msg.get_payload(decode=True)
    

    Assuming your email is encoded as MIME quoted-printable data, you can proceed to decode that using quopri module:

    import quopri
    message = quopri.decodestring(payload).decode('utf-8')
    
    print(message)