我收到了通过Python的email.parser
模块获得的电子邮件:
parser = email.parser.Parser()
msg1 = parser.parse(sys.stdin)
我想创建一个这个对象的副本,但我不确定如何最好地去做。我可以使用copy
模块......
msg2 = copy.deepcopy(msg1)
...但鉴于MIME消息可能包含一些有些任意的部分树,我不确定这是否是正确的解决方案。我可以序列化并重新分析消息......
msg2 = parser.parse(msg1.as_string())
...但文档表明as_string
方法可能并不总是做正确的事情。我可以创建一个StringIO
对象并使用generator
...
buf = String()
g = email.generator.Generator(buf)
g.flatten(msg1)
msg2 = parser.parse(buf.getvalue())
...但是复制已经解析过的东西似乎是一项非常繁重的工作。
使用copy
模块似乎是最简单的解决方案,但我不熟悉copy
模块。我做对了吗?
答案 0 :(得分:1)
由于它是MIME消息,您可以假设无论属性如何嵌套,都会有结束。如果是这样,deepcopy应该对消息的每个属性进行递归复制,这样你最终会做正确的事情来做copy.deepcopy。