Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何复制email.message.message对象?_Python_Email - Fatal编程技术网

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

Python 如何复制email.message.message对象?,python,email,Python,Email,我有一封通过Python的email.parser模块获得的电子邮件: parser = email.parser.Parser() msg1 = parser.parse(sys.stdin) 我想创建此对象的副本,但我不确定如何最好地执行此操作。我可以使用复制模块 msg2 = copy.deepcopy(msg1) …但鉴于MIME消息可能包含任意的部分树,我不确定这是否是正确的解决方案。我可以序列化并重新分析邮件 msg2 = parser.parse(msg1.as_string(

我有一封通过Python的
email.parser
模块获得的电子邮件:

parser = email.parser.Parser()
msg1 = parser.parse(sys.stdin)
我想创建此对象的副本,但我不确定如何最好地执行此操作。我可以使用
复制
模块

msg2 = copy.deepcopy(msg1)
…但鉴于MIME消息可能包含任意的部分树,我不确定这是否是正确的解决方案。我可以序列化并重新分析邮件

msg2 = parser.parse(msg1.as_string())
…但是文档表明,
as_string
方法可能并不总是正确的。我可以创建一个
StringIO
对象并使用
生成器

buf = String()
g = email.generator.Generator(buf)
g.flatten(msg1)
msg2 = parser.parse(buf.getvalue())
…但是复制已经被解析过一次的东西似乎需要做很多工作


使用
copy
模块似乎是最简单的解决方案,但我不熟悉
copy
模块。我做的对吗?

因为这是一条MIME消息,所以您可以假设,无论属性的嵌套程度如何,都会有结束。如果是这样的话,deepcopy应该对消息的每个属性进行递归复制,这样您就可以正确地执行copy.deepcopy。

因为它是一条MIME消息,所以您可以假设,无论属性多么嵌套,都会有一个结束。如果是这样,deepcopy应该对消息的每个属性进行递归复制,这样您就可以正确地执行copy.deepcopy了