Hello currently I am using IMAPLIB and EMAIL library of python for reading and get then content sends of different emails, but when I received an email response from outlook, I can not get the content from the email am receive a string like this:
'PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i\r\ndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc3R5bGU9\r\nImRpc3BsYXk6bm9uZTsiPiBQIHttYXJnaW4tdG.......'
this is the code to get the emails, I am using to authenticate IMAPLIB, the email server was built with this repo: https://github.com/modoboa/modoboa
mail.select("inbox")
result, data = mail.uid('search', None, 'UNSEEN')
inbox_item_list = data[0].split()
list_emails = []
root_dict = {}
campaigns = []
for item in inbox_item_list:
result2, email_data = mail.uid('fetch', item, '(RFC2045)')
raw_email = email_data[0][1].decode('utf-8')
email_message = email.message_from_string(raw_email)
to_= email_message["Delivered-To"]
from_= email_message['From']
subject_= email_message['Subject']
counter = 1
for part in email_message.walk():
if part.get_content_maintype() == "multipart":
continue
filename = part.get_filename()
if not filename:
ext = 'html'
filename = 'msg-part-%08d%s' %(counter, ext)
counter += 1
content_type = part.get_content_type()
if "plain" in content_type:
pass
elif "html" in content_type:
emails = {}
html_ = part.get_payload()
soup_ = BeautifulSoup(html_, "html.parser")
text = soup_.get_text()
text is the variable the saves the content of the email, works with Gmail but currently doesn't works with the email response of outlook.
So it turns out it was just base64 encoded. Here's the decoded text:
b'<html>\r\n<head>\r\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\r\n<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>\r\n</head>\r\n<body dir="ltr">\r\n<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">\r\nCount on me<br>\r\n</div>\r\n<div id="appendonsend"></div>\r\n<hr style="display:inline-block;width:98%" tabindex="-1">\r\n<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>De:</b> Giraluna Gomez <[email protected]><br>\r\n<b>Enviado:</b> lunes, 24 de mayo de 2021 4:13 p. m.<br>\r\n<b>Para:</b> Giraluna Gomez <[email protected]><br>\r\n<b>Cc:</b> [email protected] <[email protected]><br>\r\n<b>Asunto:</b> Luna golo.Test 2 from email merge</font>\r\n<div> </div>\r\n</div>\r\n<div>\r\n<div dir="ltr">Test 2 to email merge. </div>\r\n<div hspace="streak-pt-mark" style="max-height:1px"><img alt="" style="width:0px; max-height:0px; overflow:hidden" src="https://mailfoogae.appspot.com/t?sender=aMjM0NEBob2xiZXJ0b25zY2hvb2wuY29t&type=zerocontent&guid=9189324e-7d1c-4590-b502-8179902f97de"><font color="#ffffff" size="1">\xe1\x90\xa7</font></div>\r\n</div>\r\n</body>\r\n</html>\r\n'
And here's what I used to decode it:
from base64 import b64decode
print(b64decode("PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPiBQIHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO30gPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5IGRpcj0ibHRyIj4NCjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OiBDYWxpYnJpLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHJnYigwLCAwLCAwKTsiPg0KQ291bnQgb24gbWU8YnI+DQo8L2Rpdj4NCjxkaXYgaWQ9ImFwcGVuZG9uc2VuZCI+PC9kaXY+DQo8aHIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjk4JSIgdGFiaW5kZXg9Ii0xIj4NCjxkaXYgaWQ9ImRpdlJwbHlGd2RNc2ciIGRpcj0ibHRyIj48Zm9udCBmYWNlPSJDYWxpYnJpLCBzYW5zLXNlcmlmIiBzdHlsZT0iZm9udC1zaXplOjExcHQiIGNvbG9yPSIjMDAwMDAwIj48Yj5EZTo8L2I+IEdpcmFsdW5hIEdvbWV6ICZsdDsyMzQ0QGhvbGJlcnRvbnNjaG9vbC5jb20mZ3Q7PGJyPg0KPGI+RW52aWFkbzo8L2I+IGx1bmVzLCAyNCBkZSBtYXlvIGRlIDIwMjEgNDoxMyBwLiBtLjxicj4NCjxiPlBhcmE6PC9iPiBHaXJhbHVuYSBHb21leiAmbHQ7bHVuYWdvbG9AaG90bWFpbC5jb20mZ3Q7PGJyPg0KPGI+Q2M6PC9iPiBkYXZpZCsyMDIyQHplcm9jbGlja21haWwuY29tICZsdDtkYXZpZCsyMDIyQHplcm9jbGlja21haWwuY29tJmd0Ozxicj4NCjxiPkFzdW50bzo8L2I+IEx1bmEgZ29sby5UZXN0IDIgZnJvbSBlbWFpbCBtZXJnZTwvZm9udD4NCjxkaXY+Jm5ic3A7PC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2IGRpcj0ibHRyIj5UZXN0IDIgdG8gZW1haWwgbWVyZ2UuJm5ic3A7PC9kaXY+DQo8ZGl2IGhzcGFjZT0ic3RyZWFrLXB0LW1hcmsiIHN0eWxlPSJtYXgtaGVpZ2h0OjFweCI+PGltZyBhbHQ9IiIgc3R5bGU9IndpZHRoOjBweDsgbWF4LWhlaWdodDowcHg7IG92ZXJmbG93OmhpZGRlbiIgc3JjPSJodHRwczovL21haWxmb29nYWUuYXBwc3BvdC5jb20vdD9zZW5kZXI9YU1qTTBORUJvYjJ4aVpYSjBiMjV6WTJodmIyd3VZMjl0JmFtcDt0eXBlPXplcm9jb250ZW50JmFtcDtndWlkPTkxODkzMjRlLTdkMWMtNDU5MC1iNTAyLTgxNzk5MDJmOTdkZSI+PGZvbnQgY29sb3I9IiNmZmZmZmYiIHNpemU9IjEiPuGQpzwvZm9udD48L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K"))