Détecter si un email est une "Notification d'état de livraison" et extraire des informations - Python
Je suis en utilisant le Python email
module pour analyser les e-mails.
J'ai besoin d'être en mesure de dire si un email est une "Notification d'État de remise", savoir ce que l'état est, et d'extraire des informations sur l'email a échoué, par exemple. le Sujet.
L'objet que je reçois après l'analyse .parsestr(e-mail), c'est comme cela:
{'Content-Transfer-Encoding': 'quoted-printable',
'Content-Type': 'text/plain; charset=ISO-8859-1',
'Date': 'Mon, 14 Mar 2011 11:26:24 +0000',
'Delivered-To': '[email protected]',
'From': 'Mail Delivery Subsystem <[email protected]>',
'MIME-Version': '1.0',
'Message-ID': '<[email protected]>',
'Received': 'by 10.142.13.8 with SMTP id 8cs63078wfm;\r\n Mon, 14 Mar 2011 04:26:24 -0700 (PDT)',
'Return-Path': '<>',
'Subject': 'Delivery Status Notification (Failure)',
'To': '[email protected]',
'X-Failed-Recipients': '[email protected]'}
Tout d'abordcomment puis-je dire que c'est une source de données sans l'aide d'une expression régulière sur le sujet?
Deuxièmementcomment puis-je accéder au corps de l'emailet des informations telles que l'erreur a été renvoyée par le serveur de mail?
edit: travaillé en sortir, j'ai besoin d'utiliser .get_payload()
pour obtenir le contenu du message.
La e-mail docs dire:
L'Analyseur de classe a aucune différence dans son interface publique. Il n'
quelques smarts
reconnaître message/livraison-type de statut
messages, qu'il représente comme un
Instance de Message contenant séparé
Message sous-parties pour chaque bloc d'en-tête
dans la notification d'état de remise
Mise à jour:
En gros, j'ai besoin d'être en mesure fiable de détecter qu'un email est une source de données, et puis aussi pour en extraire le message d'origine afin que je puisse analyser que par email.Analyseur() et obtenir des informations à ce sujet.
source d'informationauteur Acorn
Vous devez vous connecter pour publier un commentaire.
Les docs que vous avez cités dit que le message est multi-partie, si elle est DSN:
Format d'une Notification d'État de remise à partir de rfc 3464):
Je n'utilise pas de Python, mais je suppose que Gmail a amélioré son soutien à la DSN parce que mes tests sont réussis:
Vous pouvez le voir dans l'exemple ci-dessous c'est un message multipart avec "Content-Type: multipart/; - rapport-type=livraison-état".
La façon dont je identifier de manière fiable que c'est un DSN:
Puis, je sais que:
Échantillon DSN reçu après un e-mail envoyé à [email protected]:
La
X-Failed-Recipients
en-tête semble être le moyen le plus rapide pour identifier gmail DSN. Après cela, il semble que vous devez analyser la text/plain contenu.