5

我有一封电子邮件,我正在阅读我需要修改其附件的 Python 电子邮件库。email Message 类有“attach”方法,但没有“detach”之类的东西。如何从多部分邮件中删除附件?如果可能的话,我想在不从头开始重新创建消息的情况下执行此操作。

基本上我想:

  1. 加载电子邮件
  2. 删除 mime 附件
  3. 添加新附件
4

3 回答 3

4

我想出的方法是:

  1. 使用 set_payload 将有效负载设置为空列表
  2. 创建有效负载,并附加到消息中。
于 2009-10-26T18:50:11.333 回答
3

好吧,根据我的经验,在你工作的环境中,一切都是Message对象。消息,它的部分,附件,一切。所以,要完成你想做的事,你需要

  1. 使用Parser API解析消息(这将为您获取根Message对象)
  2. 遍历结构,确定你需要什么和不需要什么(使用 Message 实例的方法 - .walk()), - 记住,一切都是Message.
  3. 将您需要的任何东西附加到您提取的部件上,您就可以开始使用了。

重申一下,您正在使用的本质上是一棵树,其中Message具有 .is_multipart() == True 的Message对象是节点,而具有 .is_multipart() == False 的对象是端节点(它们的有效负载是字符串,而不是一堆Message物体)。

于 2009-10-26T18:33:27.200 回答
3

set_payload()可能会有所帮助。

set_payload(payload[, charset])

将整个消息对象的有效负载设置为有效负载。确保有效负载不变量是客户的责任。

一个快速的交互示例:

>>> from email import mime,message
>>> m1 = message.Message()
>>> t1=email.MIMEText.MIMEText('t1\r\n')
>>> print t1.as_string()
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

t1

>>> m1.attach(t1)
>>> m1.is_multipart()
True
>>> m1.get_payload()
[<email.mime.text.MIMEText instance at 0x00F585A8>]
>>> t2=email.MIMEText.MIMEText('t2\r\n')
>>> m1.set_payload([t2])
>>> print m1.get_payload()[0].as_string()
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

t2

>>> 
于 2009-10-26T18:56:37.530 回答