如何复制email.message.Message对象?

时间:2012-08-15 01:13:30

标签: python email

我收到了通过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模块。我做对了吗?

1 个答案:

答案 0 :(得分:1)

由于它是MIME消息,您可以假设无论属性如何嵌套,都会有结束。如果是这样,deepcopy应该对消息的每个属性进行递归复制,这样你最终会做正确的事情来做copy.deepcopy。