Python e-mail lib - Como remover anexo de mensagem existente?
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:
- Coloque o e-mail
- Remova os anexos MIME
- Adicionar um novo anexo
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
- analisar a mensagem usando a Analisador API (isso vai te o raiz
Message
objeto) - 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
- 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 é:
- Definir a carga para uma lista vazia com set_payload
- Criar a carga útil, e anexar à mensagem.