2012-08-15 105 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。