Corps du message est une chaîne de caractères parfois, et une liste parfois. Pourquoi?
Mon application est écrite en python. Ce que je fais c'est que je suis en cours d'exécution d'un script sur chaque e-mail reçu par postfix et faire quelque chose avec le contenu de l'email. Procmail est responsable de l'exécution du script en prenant l'e-mail à l'entrée. Le problème a commencé quand j'ai été la conversion de la saisie de message(peut être du texte) à email_message objet(car ce dernier est très pratique). Je suis à l'utilisation de l'email.message_from_string (où sont les e-mails de courrier électronique par défaut module est livré avec python).
import email
message = email.message_from_string(original_mail_content)
message_body = message.get_payload()
Ce message_body est parfois retour d'une liste[email.message.Instance de Message,e-mail.message.Message instance] et parfois de retourner une chaîne de caractères(corps réel contenu de l'e-mail entrant). Pourquoi est-il. Et même j'en ai trouvé un plus grand nombre d'observations. Quand j'ai été la navigation par le biais de l'e-mail.message.Message.get_payload() docstring, j'ai trouvé ce..
"""
La charge utile sera un objet de liste ou d'une chaîne.Si vous muter
l'objet de la liste, à vous de modifier le message de la charge utile en place....."""
Alors, comment dois-je le générique de la méthode pour obtenir le corps de l'email par le biais de python? Merci de m'aider.
OriginalL'auteur None-da | 2009-02-27
Vous devez vous connecter pour publier un commentaire.
Bien, les réponses sont correctes, vous devriez lire les docs, mais pour un exemple d'une façon générique:
C'est sujette à des catastrophes, comme il est concevable que les parties elles-mêmes peuvent avoir multipartites, et il a vraiment ne retourne la première partie du texte, donc cela peut être aussi une mauvaise, mais vous pouvez jouer avec elle.
Dépend de ce que vous avez été envoyé. Vous pouvez couramment, par exemple, obtenir un texte/html et text/plain version de la même chose. Vous pouvez modifier la fonction pour rechercher et préfèrent une text/plain type de contenu sur les autres texte/ types d'.
Génial bobince. Vous avez absolument raison 😀
Sachez également qu'il n'y a pas de "bonne" structure d'un message. Différents clients de messagerie permettra de structurer différemment, ainsi que de définir différents en-têtes.
Ignore le fait que certains messages sont HTML, vous auriez besoin d'un HTML de-analyseur à utiliser tous texte possible sous-types.
OriginalL'auteur Ali Afshar
Aussi fou que cela puisse paraître, la raison de la parfois de la chaîne, parfois à la liste de la sémantique sont donné dans la documentation. Fondamentalement, les messages sont renvoyés sous forme de listes.
OriginalL'auteur unwind
Plutôt que de simplement la recherche d'une sous-partie, à l'utilisation de marche() pour itérer sur le contenu du message
De la marche() la méthode retourne un itérateur que vous pouvez faire une boucle (par exemple, c'est un générateur). Si le message n'est pas un conteneur de pièces (c'est à dire n'a pas de pièces jointes ou suppléants), à la marche() la méthode sera ensuite de retour d'un itérateur d'un seul élément: le message lui-même.
Vous souhaitez ignorer tout "multipart" parties qu'ils sont juste de la colle.
La méthode ci-dessus renvoie tous les formats de pièces. Vous pouvez élargir cette pour simplement retourner le texte des pièces si elles contiennent les informations que vous recherchez.
Noter que Python 2.5, les méthodes get_type(), get_main_type(), et get_subtype() ont été supprimés -> http://docs.python.org/library/email.message.html#email.message.Message.walk
Je pense que la seul '=' doit être '==' dans l'instruction if
Merci - corrigé
OriginalL'auteur timbo
Il pourrait être MIME multipart
Voir http://docs.python.org/library/email.parser.html#additional-notes
OriginalL'auteur vartec