Python-解析电子邮件正文并截断 MIME 标头
Posted
技术标签:
【中文标题】Python-解析电子邮件正文并截断 MIME 标头【英文标题】:Python-Parse email Body and truncate MIME headers 【发布时间】:2016-06-09 14:06:43 【问题描述】:我有一个看起来有点像的电子邮件正文。
现在我想从中删除所有标题,只保留对话电子邮件文本。我如何在python中做到这一点?
我尝试了 email.parser 模块,但这并没有给我想要的结果。
请查看以下代码以获取更多信息。
import email
a="""--c66f5985-233d-4e89-b598-6398b60cbe00
Content-Type: multipart/alternative;
differences="Content-Type";
boundary="d5eff9f8-76b3-4320-adfb-1e51add8fa8f"
--d5eff9f8-76b3-4320-adfb-1e51add8fa8f
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
THis is a demo email body
Thanks And Regards,
Ana
"""
b = email.message_from_string(a)
if b.is_multipart():
for payload in b.get_payload():
# if payload.is_multipart(): ...
print (payload.get_payload())
else:
print (b.get_payload())
【问题讨论】:
【参考方案1】:import imaplib,email
hst = "your.host.adresse.com"
usr = "login"
pwd = "password"
imap = imaplib.IMAP4(hst)
try:
imap.login(usr, pwd)
except Exception as e:
raise IOError(e)
try:
imap.select("Inbox") # Tell Imap where to go
result, data = imap.uid('search', None, "ALL")
latest = data[0].split()[-1]
result, data = imap.uid('fetch', latest, '(RFC822)')
a = data[0][1] # This contains the Mail Data
except Exception as e:
raise IOError(e)
b = email.message_from_string(a)
if b.is_multipart():
for payload in b.get_payload():
b = (payload.get_payload())
else:
b = (b.get_payload())
print b
这会从邮件中删除您不希望在最终文本中出现的所有内容。我已经用你的代码对此进行了测试。你没有展示你是如何导入邮件的(你的a
)所以我猜这就是你得到解码问题的地方。
如果您对 html 邮件有任何问题:
from bs4 import BeautifulSoup
soup = BeautifulSoup(b, 'html.parser')
soup = soup.get_text()
print soup
现在应该可以完成这项工作,但我建议您将默认的 python 解析器更改为 lxml 或 html5lib。
【讨论】:
而且我只是使用如上所示的电子邮件正文为我提供了便利,没有主机名和其他凭据...以上是关于Python-解析电子邮件正文并截断 MIME 标头的主要内容,如果未能解决你的问题,请参考以下文章