Pergunta

Eu tenho um e-mail que eu estou lendo com o e-mail lib Python que eu preciso modificar os anexos. A classe de e-mail Mensagem tem o método "anexar", mas não tem nada parecido "desconexão". Como posso remover um anexo de uma mensagem concatenada? Se possível, eu quero fazer isso sem recriar a mensagem a partir do zero.

Essencialmente eu quero:

  1. Coloque o e-mail
  2. Remova os anexos MIME
  3. Adicionar um novo anexo
Foi útil?

Solução

set_payload() pode ajudar.

set_payload(payload[, charset])

Definir carga inteira do objeto mensagem a carga útil. É responsabilidade do cliente para garantir os invariantes de carga útil.

Um exemplo interativa rápida:

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

>>> 

Outras dicas

Bem, da minha experiência, no contexto que você está trabalhando, tudo é um objeto Message. A mensagem, suas peças, acessórios, tudo. Assim, para realizar o que você quer fazer, você precisa

  1. analisar a mensagem usando a Analisador API (isso vai te o raiz Message objeto)
  2. A pé a estrutura, determinando o que você precisa eo que você não (usando um método de uma instância de Mensagem, - .walk ()), -. Lembre-se, que tudo é uma Message
  3. Coloque o que você precisa para anexar as peças que você extraiu e você é bom para ir.

Para reiterar, o que você está trabalhando com é, essencialmente, uma árvore, onde Message objetos com .is_multipart () == true são nós e Message objetos com .is_multipart () == False sejam final de nós (a sua carga útil é uma string, não um monte de objetos Message).

A maneira que eu descobri para fazê-lo é:

  1. Definir a carga para uma lista vazia com set_payload
  2. Criar a carga útil, e anexar à mensagem.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top