在 Flask IMAP 应用程序中呈现 html
Render html in Flask IMAP application
我正在创建一个 Flask 应用程序,它应该通过向 GMAIL 等电子邮件服务提供商发送 IMAP 或 POP 请求来检索电子邮件。我可以使用 imaplib 库检索电子邮件。一封仅包含文本的简单电子邮件很容易检索和显示。不幸的是,当电子邮件包含图像、GIF 或特殊样式时,它会变得更加困难。
每当我 运行 检索电子邮件内容的代码时,我似乎得到了 HTML。但是当我尝试 "render" 它到 html 文件并使用 render_template('test.html') 时,似乎我会把 html 放入 html .
将我从电子邮件服务提供商那里获得的内容转移到我在 Flask 中的 Web 应用程序的正确方法是什么?
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()
如果您想将 html 代码作为变量传递给 jinja 模板,请添加 |safe。例如,如果电子邮件包含 html 格式的电子邮件:
{{ email |safe }}
我正在创建一个 Flask 应用程序,它应该通过向 GMAIL 等电子邮件服务提供商发送 IMAP 或 POP 请求来检索电子邮件。我可以使用 imaplib 库检索电子邮件。一封仅包含文本的简单电子邮件很容易检索和显示。不幸的是,当电子邮件包含图像、GIF 或特殊样式时,它会变得更加困难。
每当我 运行 检索电子邮件内容的代码时,我似乎得到了 HTML。但是当我尝试 "render" 它到 html 文件并使用 render_template('test.html') 时,似乎我会把 html 放入 html .
将我从电子邮件服务提供商那里获得的内容转移到我在 Flask 中的 Web 应用程序的正确方法是什么?
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()
如果您想将 html 代码作为变量传递给 jinja 模板,请添加 |safe。例如,如果电子邮件包含 html 格式的电子邮件:
{{ email |safe }}