2012-08-15 41 views
1

我必须通过Python的email.parser模块获得的电子邮件:如何复制email.message.Message对象?

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

由于它是一条MIME消息,因此您可能会认为无论属性如何嵌套,都会有结束。如果是这样,deepcopy应该对消息的每个属性做一个递归的拷贝,所以你最终会做正确的事情copy.deepcopy。