我有一封电子邮件,我正在阅读Python电子邮件库,我需要修改附件。电子邮件消息类具有“附加”功能。方法,但没有像“分离”那样的东西。如何从多部分邮件中删除附件?如果可能的话,我想在不重新创建消息的情况下这样做。

基本上我想:

  1. 加载电子邮件
  2. 删除mime附件
  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

>>> 

其他提示

根据我的经验,在您正在使用的上下文中,一切都是 Message 对象。消息,它的部分,附件,一切。所以,要完成你想做的事,你需要

  1. 使用 Parser API解析邮件(这将使您获得root 消息对象)
  2. 走结构,确定你需要什么和你不需要什么(使用Message实例的方法, - 。walk()), - 记住,一切都是消息
  3. 将您需要附加的任何物品附加到您已经提取的部件上,您就可以了。
  4. 重申一下,你正在使用的是一个树,其中 Message 对象与.is_multipart()== True是节点和 Message 对象。 is_multipart()== False是结束节点(它们的有效负载是一个字符串,而不是一堆消息对象)。

我想出的方法是:

  1. 使用set_payload
  2. 将有效负载设置为空列表
  3. 创建有效负载,并附加到消息。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top