如何通过Gmail API读取邮件?HTML内容美化求助
解决Gmail邮件HTML正文无法正常渲染的问题
方案一:在Flask模板中允许HTML渲染
Jinja2模板默认会自动转义HTML内容,导致HTML代码以纯文本形式显示而非渲染。只需在模板中使用safe过滤器关闭转义:
修改emails.html里的邮件正文展示代码:
<p>Body: {{ email.body|safe }}</p>
修改后,HTML格式的正文会被浏览器正常渲染,保留原有的排版和样式。
注意:该方式会直接渲染邮件中的全部HTML内容,若邮件包含恶意脚本存在安全风险,仅建议用于处理可信来源的邮件。
方案二:后端将HTML转换为纯文本
如果不需要保留HTML格式,希望显示干净的纯文本内容,可以借助beautifulsoup4库提取HTML文本:
- 安装依赖库:
pip install beautifulsoup4
- 修改
getMessage函数,添加HTML转纯文本逻辑:
首先导入BeautifulSoup:
from bs4 import BeautifulSoup
然后替换原有的邮件正文获取代码:
# 提取邮件正文 message_main_type = mime_msg.get_content_maintype() if message_main_type == 'multipart': for part in mime_msg.get_payload(): # 优先获取纯文本内容 if part.get_content_subtype() == 'plain': email_info['body'] = part.get_payload() break # 若无纯文本,将HTML转为纯文本 elif part.get_content_subtype() == 'html': soup = BeautifulSoup(part.get_payload(), 'html.parser') email_info['body'] = soup.get_text() elif message_main_type == 'text': if mime_msg.get_content_subtype() == 'html': soup = BeautifulSoup(mime_msg.get_payload(), 'html.parser') email_info['body'] = soup.get_text() else: email_info['body'] = mime_msg.get_payload()
处理后,无论邮件是纯文本还是HTML格式,都会转换为无格式的纯文本内容展示。
额外优化说明
原代码仅判断内容主类型为text,未区分text/plain和text/html。优化后的逻辑会优先提取纯文本部分,避免不必要的HTML转换,提升内容可读性。
内容的提问来源于stack exchange,提问作者Jaswanth
相关产品推荐
相关产品推荐

