2009-10-26 4 views
3

J'ai un email que je suis en train de lire avec la librairie d'emails Python dont j'ai besoin pour modifier les pièces jointes. La classe Message a la méthode "attach", mais n'a rien à voir avec "detach". Comment puis-je supprimer une pièce jointe d'un message en plusieurs parties? Si possible, je veux le faire sans recréer le message à partir de zéro.Python email lib - Comment supprimer une pièce jointe d'un message existant?

Essentiellement, je veux:

  1. charge l'e-mail
  2. Retirez les pièces jointes MIME
  3. Ajouter un nouvel accessoire

Répondre

2

set_payload() peut aider.

set_payload(payload[, charset])

Définir la charge utile à la charge utile de l'ensemble de l'objet du message. C'est la responsabilité du 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 

>>> 
3

Eh bien, d'après mon expérience, dans le contexte que vous travaillez , tout est un objet Message. Le message, ses parties, ses pièces jointes, tout. Donc, pour accomplir ce que vous voulez faire, vous devez

  1. analyser le message en utilisant l'API Parser (cela va vous l'objet racine Message)
  2. Marchez la structure, la détermination de ce que vous avez besoin et ce que vous ne pas (en utilisant une méthode d'une instance de message, - .walk()), - rappelez-vous, que tout est un Message.
  3. Fixez tout ce dont vous avez besoin pour attacher aux pièces que vous avez extraites et vous êtes prêt à partir.

Je le répète, ce que vous travaillez avec est, essentiellement, un arbre, où Message objets avec .is_multipart() == Vrai sont des noeuds et des objets avec Message (.is_multipart) == Les faux nœuds d'extrémité (leur charge utile est une chaîne, pas un groupe d'objets Message).

2

La façon dont j'ai compris de le faire est:

  1. Régler la charge utile à une liste vide avec set_payload
  2. Créez la charge utile et joindre au message.
Questions connexes