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 标头的主要内容,如果未能解决你的问题,请参考以下文章

Python SMTP/MIME 消息正文

从 Lotus Notes 解析 MIME 电子邮件

验证/测试 mime4j 解析内容的输出

只获取 MIME 电子邮件的“文本/纯文本”部分

从 php 中的 postfix 解析邮件数据(搜索 mime-parser/decoder 类)

带有正文内容的 Python 电子邮件多部分