Python email lib - Comment supprimer une pièce jointe d'un message existant?
Question
J'ai un e-mail que je lis avec la librairie de messagerie Python et dont j'ai besoin pour modifier les pièces jointes. La classe de message électronique contient le message " attach " méthode, mais n’a rien de tel que "détacher". Comment puis-je supprimer une pièce jointe d'un message multipart? Si possible, je souhaite le faire sans recréer le message à partir de zéro.
Je veux essentiellement:
- Chargez l'email
- Supprimer les pièces jointes mime
- Ajouter une nouvelle pièce jointe
La solution
set_payload ()
peut aider.
set_payload (charge utile [, charset])
Définissez la charge totale de l'objet de message sur la charge utile. Il incombe au client d’assurer les invariants de la charge utile.
Un exemple interactif rapide:
>>> 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
>>>
Autres conseils
Eh bien, d’après mon expérience, dans le contexte dans lequel vous travaillez, tout est un objet Message
. Le message, ses parties, pièces jointes, tout. Donc, pour accomplir ce que vous voulez faire, vous devez
- analyser le message à l'aide de l'API Analyseur (vous obtiendrez le objet
Message
racine) - Parcourez la structure, en déterminant ce dont vous avez besoin et ce que vous n’avez pas (à l’aide d’une méthode d’une instance de Message, - .walk ()), - rappelez-vous que tout est un
Message
. - Attachez tout ce que vous devez attacher aux parties que vous avez extraites et vous êtes prêt à partir.
Pour rappel, vous travaillez avec, essentiellement, une arborescence, où les objets Message
avec .is_multipart () == True sont des noeuds et les objets Message
avec. is_multipart () == False sont des noeuds d'extrémité (leur charge utile est une chaîne et non un tas d'objets Message
).
Voici comment je me suis débrouillé pour le faire:
- Définissez la charge sur une liste vide avec set_payload
- Créez la charge utile et joignez-la au message.