Python中字符串格式的邮件有效载荷
我用 get_payload()
方法得到了一个字符串形式的负载(payload)。但是我想把这个负载处理成可以逐字访问的方式。
我尝试了好几种方法,比如 as_string()
方法、flatten()
方法和 get_charset()
方法,但每次都遇到了一些问题。
我用以下代码得到了我的负载:
import email
from email import *
f=open('mail.txt','r')
obj=email.parser.Parser()
fp=obj.parse(f)
payload=fp.get_payload()
2 个回答
0
我得到了一个字符串作为我的数据,因为我的数据不是多部分的。如果是多部分的话,它会返回一个字符串列表。所以现在我可以直接使用以下代码。
payload=fp.get_payload()
abc=payload.split(" ")
运行后,它给我的输出是这样的:
['good', 'day\nhttp://72.167.116.186/image/bdfedx.php?iqunin=3D41\n\n', '', '', '', '', '', '', '', '', '', '', '', 'Sun,', '18', 'Dec', '2011', '10:53:43\n_________________\n"She', 'wiped', 'him', 'dry', 'with', 'soft', 'flannel,', 'and', 'gave', 'him', 'some', 'clean,', 'dry', 'clothes,=\n', 'and', 'made', 'him', 'very', 'comfortable', 'again."', '(c)', 'Lyrica', 'wa946758\n']
感谢 jdi :)
附注:昨天没法把它发成答案,因为有一些积分的限制。
3
我刚刚用我自己的一些原始邮件测试了你的代码片段,运行得很好……
get_payload() 这个函数会返回一个列表或者字符串,所以你需要先检查这一点。
if isinstance(payload, list):
for m in payload:
print str(m).split()
else:
print str(m).split()
编辑
根据我们的讨论,你的问题是没有在 fp 对象上检查 is_multipart(),而 fp 实际上是一个消息实例。如果 fp.is_multipart() 返回 True,那么 get_payload() 会返回一个消息实例的列表。在你的例子中,根据你提供的邮件内容,它并不是多部分的,fp 实际上就是你想要的那个对象。