1

我有一封通过 Pythonemail.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模块不熟悉。我在做正确的事吗?

4

1 回答 1

2

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

于 2012-08-15T01:34:23.417 回答