Разбор тела Python IMAPLIB HTML - PullRequest
       16

Разбор тела Python IMAPLIB HTML

0 голосов
/ 26 сентября 2018

так что в основном у меня есть этот скрипт, который работает непрерывно, и когда в почтовый ящик приходит новое электронное письмо с определенным текстом в теме, он получает информацию из электронного письма.Мне удалось получить его только для извлечения предмета из электронного письма, но я не могу получить его и получить тело письма независимо от того, что я пытаюсь, я считаю, что тело письма находится в HTML, поэтому я попытался использовать BeautifulSoup для анализа телано это не работает вообще.Пожалуйста помоги!!!Вот что у меня есть:

import email
import imaplib
from bs4 import BeautifulSoup
import time
import sys

username = 'xxx.xxx@xxx.xx'
password = 'xxxxxx'

mail = imaplib.IMAP4_SSL('imap-mail.outlook.com')
(retcode, capabilities) = mail.login(username, password)
mail.list()

n=0
while True:
    mail.select('inbox')
    (retcode, messages) = mail.search(None, 'UNSEEN', '(SUBJECT "xxxxxxx- 
     ")', '(FROM "xx.xx@xxxx.xx")')
    if retcode == 'OK':
        for num in messages[0].split():
            n=n+1
            print('Processing Email ' + str(n))
            typ, data = mail.fetch(num, '(RFC822)')
            for response_part in data:
                if isinstance(response_part, tuple):
                    original = email.message_from_bytes(response_part[1])
                    print("Subject: " + original['Subject'])
                    typ, data = mail.store(num,'+FLAGS','\\Seen')
                    time.sleep(120)

1 Ответ

0 голосов
/ 26 сентября 2018

Комментарий : "body", возвращаемое imap.fetch, обычно bytes, а не строка, которая вызывает исключение

Изменить на:

msg = email.message_from_bytes(body)

Вопрос : Я не могу его получить, получите тело письма

Например:

import email, imaplib

username = 'xxx.xxx@xxx.xx'
password = 'xxxxxx'
imap = imaplib.IMAP4_SSL('imap-mail.outlook.com')
imap.login(username, password)
imap.select("inbox")

resp, items = imap.search(None, "(UNSEEN)")

for n, num in enumerate(items[0].split(), 1):
    resp, data = imap.fetch(num, '(RFC822)')

    body = data[0][1]
    msg = email.message_from_string(body)
    content = msg.get_payload(decode=True)

    print("Message content[{}]:{}".format(n, content))
...