Python email lib - Как удалить вложение из существующего сообщения?

StackOverflow https://stackoverflow.com/questions/1626403

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть электронное письмо, которое я читаю с почтовой библиотекой Python, для которого мне нужно изменить вложения. Класс сообщений электронной почты имеет " прикрепить " метод, но не имеет ничего похожего на «detach». Как я могу удалить вложение из составного сообщения? Если возможно, я хочу сделать это без воссоздания сообщения с нуля.

По сути, я хочу:

<Ол>
  • Загрузить письмо
  • Удалить вложения MIME
  • Добавить новое вложение
  • Это было полезно?

    Решение

    set_payload () может помочь.

      

    set_payload (полезная нагрузка [, кодировка])

         

    Установите полезную нагрузку всего объекта сообщения на полезную нагрузку. Ответственность за обеспечение инвариантов полезной нагрузки лежит на клиенте.

    Быстрый интерактивный пример:

    >>> 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 . Сообщение, его части, вложения, все. Итак, чтобы выполнить то, что вы хотите сделать, вам нужно

    <Ол>
  • проанализируйте сообщение с помощью API Parser (это поможет вам корневой объект Message )
  • Обходите структуру, определяя, что вам нужно, а что нет (используя метод экземпляра Message, - .walk ()), - помните, что все является Message .
  • Прикрепите все, что вам нужно, к извлеченным частям, и все готово.
  • Чтобы повторить, с чем вы работаете, это, по сути, дерево, где объекты Message с .is_multipart () == True являются узлами и объектами Message с. is_multipart () == False - конечные узлы (их полезная нагрузка - строка, а не набор объектов Message ).

    Я понял, как это сделать:

    <Ол>
  • Установите полезную нагрузку в пустой список с помощью set_payload
  • Создайте полезную нагрузку и прикрепите к сообщению.
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top