2010-10-26 20 views
2

J'écris une application App Engine Google qui traite le courrier entrant, et voici le code que je suis actuellement en utilisant pour traiter les messages de courrier:Comment décoder un message électronique codé binaire en Python?

for content_type, body in email_bodies: 
#8bit bug in mail messages - see bug report here 
#http://code.google.com/p/googleappengine/issues/detail?id=2383 
if body.encoding == '8bit': 
    body.encoding = '7bit' 

#test for html content 
if content_type == "text/html": 
    #parse html result 

if content_type == "text/plain": 
    decoded_msg_body = body.decode() 

Cependant, je viens de recevoir un message qui utilisait le système de codage binaire et lorsque mon programme a essayé de traiter le message en utilisant body.decode(), j'ai reçu un UnknownEncodingError. Comment ce programme devrait-il analyser le type de contenu binaire? Aussi, comment puis-je imiter ce type de message sur ma version locale de GAE afin que je puisse déboguer et tester?

Je vous remercie de votre aide, Kevin

Répondre

1

Plutôt que de réinventer la roue, vous devriez essayer Python construit dans l'analyseur de courrier électronique.

http://docs.python.org/library/email.parser.html

Il est conçu pour gérer le levage nécessaires à l'obtention de toutes sortes de formats de courrier électronique dans un bon objet Python. Utilisez-le pour faire l'analyse, et vous obtiendrez des objets bien prévisibles avec lesquels travailler.

Le module de courrier électronique n'effectue pas l'envoi et la réception de messages, il aide simplement à les assembler et à les analyser.

+0

Cela fonctionnera sur GAE si vous utilisez la propriété "original" du message, assez juste. Merci Paul. –

+0

Génial. Je ne savais pas à quel point la manipulation était bizarre, mais étant donné le fonctionnement normal de ces choses, je me suis dit que c'était probablement un bon coup. –