Я был бы очень признателен, если бы кто-нибудь мог помочь мне с этой проблемой.
Я реализовал приведенный ниже код для чтения "непрочитанных писем из почтового ящика gmail".Мне нужно напечатать «Кому», «От кого», «Тема», «Тело» и «сохранить вложения в указанном месте»
У меня есть 2 проблемы здесь.
- Еслиесть любое письмо с вложениями, выдает ошибку
Body: [<email.message.Message object at 0x026D1050>, <email.message.Message object at 0x02776B70>]
.Он напечатает все необходимые вещи и сохранит вложения, но НЕ печатает тело.
Это прекрасно работает, если вложение не включено.
Если в теле письма есть какой-либо стиль, например, «жирный / курсив / подчеркивание / цвет ... и т. Д.», Он не печатается как есть.
Пример: Python печатается как Python = C2 = A0i =, и иногда "*" разделяется другой стиль.
def get_body(email_message):
for payload in email_message.get_payload():
# print('Body:\t', payload.get_payload())
break
return(payload.get_payload())
def read_email(server,uname,pwd):
username = uname
password = pwd
mail = imaplib.IMAP4_SSL(server)
mail.login(username, password)
mail.select("inbox")
try:
result, data = mail.uid('search', None, '(UNSEEN)')
inbox_item_list = data[0].split()
most_recent = inbox_item_list[-1]
result2, email_data = mail.uid('fetch', most_recent, '(RFC822)')
raw_email = email_data[0][1].decode("UTF-8")
email_message = email.message_from_string(raw_email)
for part in email_message.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
filename = part.get_filename()
att_path = os.path.join(location, filename)
if not os.path.isfile(att_path):
fp = open(att_path, 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
print('Downloaded file:', filename)
if email_message.is_multipart():
for payload in email_message.get_payload():
print('To:\t\t', email_message['To'])
print('From:\t', email_message['From'])
print('Subject:', email_message['Subject'])
print('Date:\t',email_message['Date'])
print('Body:\t', get_body(email_message))
break
else:
print('Nothing'])
except IndexError:
print("No new email")
while True:
read_email("imap.gmail.com", "s@gmail.com", "spassword")
time.sleep(10)
Большое спасибо