2017-09-04 5 views
-1

Bonjour j'ont des problèmes d'analyse syntaxique une date à partir d'un e-mail avec Python 2.6 Voici le code:Parsing datetime de courrier électronique en Python 2.6

typ_sent, data_sent = sentbox.fetch(num_sent, '(RFC822)') 
    mail_sent = email.message_from_string(data_sent[0][1]) 
    subject_sent = unicode(email.header.decode_header(mail_sent['Subject'])[0]) 
    from_sent = unicode(email.header.decode_header(mail_sent['From'])[0]) 
    datetime_sent = email.utils.mktime_tz(email.utils.parsedate_tz((mail_sent["Date"]))) 
    datetime_sent = datetime.datetime.fromtimestamp(datetime_sent) 

J'ai une erreur en essayant d'avoir le temps de la date de la poste dans l'objet datetime. Voici l'erreur de message.

File "checkIMAP_client.py", line 116, in <module> 
    datetime_sent = email.utils.mktime_tz(email.utils.parsedate_tz((mail_sent["Date"]))) 
    File "/usr/lib64/python2.6/email/_parseaddr.py", line 142, in mktime_tz 
    if data[9] is None: 
TypeError: 'NoneType' object is unsubscriptable 

Et j'ai besoin d'analyser un objet datetime à un format de date e-mail valide.

EDIT: Dans mon script, j'ai besoin de comparer les e-mails provenant des éléments envoyés et des dossiers de la boîte de réception. Je peux lire la date à partir des emails de la boîte de réception (j'utilise la commande append sur un objet email.message()) Mais je ne peux pas lire le datetime à partir des emails envoyés depuis mon SMTP en utilisant smtplib.

J'ai modifié le code un peu pour voir ce qui se passe: code:

datetime_sent = unicode(mail_sent["Date"]) 
print("Datetime sent =" + datetime_sent) 

rapide:

Datetime sent =None 

je regarderai sur la façon dont la date est censé être mis en œuvre dans les e-mails envoyés . Il semble que j'ai un problème ici puisque les courriels de la boîte de réception n'ont pas le problème.

EDIT: Ok, j'ai trouvé le problème. J'envoie des courriels de mon serveur à un serveur distant avec smtplib. Lorsque le serveur distant reçoit le courrier de mon serveur sur une certaine adresse, il le redirige vers l'adresse d'origine. Mes scripts ne peuvent pas lire la date et l'heure de l'e-mail envoyé. Alors, quel est le bon format que je dois utiliser pour email.parsedate_tz() pour fonctionner?

+0

Le message a-t-il un en-tête 'Date:' valide? Vous avez plusieurs appels de fonction dans une ligne; vous pouvez peut-être les dérouler sur plusieurs lignes pour voir exactement où vous obtenez un résultat inattendu. Peut-être [modifier] votre question pour inclure ces diagnostics. Voir aussi les instructions pour inclure un [mcve]. – tripleee

+0

Pourquoi ciblez-vous Python 2.6 de nos jours? La transition vers 3.6 vous donnerait une bibliothèque 'email' très mise à jour avec l'analyse de date intégrée. – tripleee

+0

Commentaire 1: J'ai eu un mauvais format de date sur certains e-mails que je analysais. Après une purge sur la boîte aux lettres de test, c'était OK. J'avais peur d'avoir un problème parce que d'autres personnes de Stack avaient le même problème. Commentaire 2: Je ne peux pas mettre à jour Python sur le serveur qui va exécuter le script. – Aurelien

Répondre

0

Ok, J'ai donc vérifié mes fonctions d'analyse. Cela fonctionne quand j'envoie un mail de Thunderbird en utilisant mon serveur smtp. Je peux obtenir mon objet datetime. Stuff a frappé le ventilateur quand j'envoie mon courrier avec python.