【问题标题】:Python email lib - How to remove attachment from existing message?Python email lib - 如何从现有邮件中删除附件?
【发布时间】:2010-12-10 05:31:03
【问题描述】:

我正在使用 Python 电子邮件库阅读一封电子邮件,我需要修改它的附件。 email Message 类有“attach”方法,但没有“detach”之类的东西。如何从多部分邮件中删除附件?如果可能的话,我想这样做而不是从头开始重新创建消息。

基本上我想:

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

【问题讨论】:

标签: python email mime


【解决方案1】:

我想出的方法是:

  1. 使用 set_payload 将有效负载设置为空列表
  2. 创建有效负载,并附加到消息中。

【讨论】:

    【解决方案2】:

    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
    
    >>> 
    

    【讨论】:

    • 请注意,email API 在 Python 3.6 中已进行了相当大的更新;您不想再在新代码中使用旧 API。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      相关资源
      最近更新 更多