使用Python的imap_tools库打印邮件正文失败求助
解决imap_tools无法获取邮件正文(msg.text为空)的问题
问题原因
你遇到的情况是因为该邮件仅包含HTML格式的正文,没有纯文本(text/plain)版本。很多邮件客户端(比如Outlook)默认发送的邮件可能只生成HTML格式内容,不附带纯文本副本,所以msg.text自然为空,而msg.html能获取到内容。
解决方案
如果需要纯文本格式的正文,可以通过解析HTML内容来提取文本。推荐使用BeautifulSoup库来处理:
- 先安装BeautifulSoup:
pip install beautifulsoup4
- 修改代码如下:
from imap_tools import MailBox, A from bs4 import BeautifulSoup with MailBox('outlook.office365.com').login('test@test.com', 'test') as mailbox: for msg in mailbox.fetch(A(seen=False)): # 优先使用纯文本正文 if msg.text: print(msg.text) # 若无纯文本,则解析HTML提取文本 elif msg.html: soup = BeautifulSoup(msg.html, 'html.parser') print(soup.get_text(strip=True))
补充说明
soup.get_text(strip=True)会移除HTML标签,并清理多余的空格和换行,得到干净的纯文本内容。- 如果你需要保留部分格式,可以调整BeautifulSoup的提取参数,比如去掉
strip=True,或者自定义解析规则。
内容的提问来源于stack exchange,提问作者Mr. Annonymous
相关产品推荐
相关产品推荐

