0

我正在尝试使用 python email.parser 解析电子邮件。当我的电子邮件包含多个 Received 记录时, email.parser 似乎忽略了这些记录。

例如,对于输入:

...
Received: from localhost (jalapeno [127.0.0.1])
    by jmason.org (Postfix) with ESMTP id 5C4E816F6D
    for <jm@localhost>; Sun,  6 Oct 2002 22:54:39 +0100 (IST)
Received: from jalapeno [127.0.0.1]
    by localhost with IMAP (fetchmail-5.9.0)
    for jm@localhost (single-drop); Sun, 06 Oct 2002 22:54:39 +0100 (IST)
...

输出是:

...
Received ::: from localhost (jalapeno [127.0.0.1])
    by jmason.org (Postfix) with ESMTP id 5C4E816F6D
    for <jm@localhost>; Sun,  6 Oct 2002 22:54:39 +0100 (IST)
Received ::: from localhost (jalapeno [127.0.0.1])
    by jmason.org (Postfix) with ESMTP id 5C4E816F6D
    for <jm@localhost>; Sun,  6 Oct 2002 22:54:39 +0100 (IST)
...

我正在使用以下 python 代码

import email
f = open('email.txt', 'r')
data = f.read()
e = email.message_from_string(data)
for i in e.keys():
    print i, ':::', e[i]

这是 email.parser 的错误吗?

您是否建议任何其他电子邮件解析 python 库?

4

1 回答 1

2

python文档email.__getitem__()说:

请注意,如果命名字段在消息的标头中出现多次,则将返回这些字段值中的哪一个是未定义的。使用 get_all() 方法获取所有现存命名标头的值。

因此,使用 e.get_all(i) 而不是 e[i] 来获取 Received: 标头的所有值。

于 2010-11-12T03:12:40.647 回答