Рендеринг HTML в приложении Flask IMAP - PullRequest
0 голосов
/ 28 декабря 2018

Я создаю приложение Flask, которое должно извлекать электронные письма, отправляя запросы IMAP или POP поставщику услуг электронной почты, например, GMAIL.Я могу получить электронную почту с помощью библиотеки imaplib.Простое электронное письмо, содержащее только текст, достаточно просто для извлечения и отображения.К сожалению, когда электронное письмо состоит из изображений, GIF-файлов или специальных стилей, оно становится более сложным.

Всякий раз, когда я запускаю код, который извлекает содержимое электронных писем, мне кажется, что я получаю HTML.Но когда я пытаюсь «визуализировать» его в html-файл и использовать render_template ('test.html'), кажется, что я помещаю html в html.

Как правильно будет переместить то, что я получаюот поставщика услуг электронной почты к моему веб-приложению во Flask?

class EmailClient:
imap_host = 'imap.gmail.com'
imap_user = 'test@test.com'
imap_pass = 'password'

def process_mailbox(M):
    diction = []

    rv, data = M.search(None, "ALL")
    if rv != 'OK':
        print('No messages found!')
        return

    for num in data[0].split():
        rv, data = M.fetch(num, '(RFC822)')
        if rv != 'OK':
            print("ERROR getting message", num)
            return

        msg = email.message_from_bytes(data[0][1])
        hdr = email.header.make_header(email.header.decode_header(msg['Subject']))
        subject = str(hdr)
        print('Message %s: %s' % (num, subject))

        date_tuple = email.utils.parsedate_tz(msg['Date'])
        if date_tuple:
            local_date = datetime.datetime.fromtimestamp(email.utils.mktime_tz(date_tuple))
            print('Local Date:', local_date.strftime('%a, %d %b %Y %H:%M:%S'))

    for part in msg.walk():
        if part.get_content_type() == 'text/html':
            print(part.get_payload())
            diction.append(part.get_payload())

M = imaplib.IMAP4_SSL('imap.gmail.com')

try:
    rv, data = M.login(imap_user, imap_pass)
except imaplib.IMAP4.error:
    print("LOGIN FAILED!")
    sys.exit(1)

print(rv, data)

rv, mailboxes = M.list()
if rv == 'OK':
    print('Mailboxes:')
    print(mailboxes)

rv, data = M.select('Inbox')
if rv == 'OK':
    print('Processing mailbox...\n')
    process_mailbox(M)
    M.close()
else:
    print('ERROR: Unable to open mailbox', rv)

M.logout() 

1 Ответ

0 голосов
/ 28 декабря 2018

Если вы хотите передать html-код в качестве переменной в шаблон jinja, добавьте | safe.Например, если электронная почта содержит электронную почту в формате html:

{{ email |safe }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...