2017-09-04 1 views
-1

Hallo, ich habe Probleme ein Datum aus einer E-Mail mit Python Parsen 2.6 Hier ist der Code:Parsing Datumzeit von E-Mail in 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) 

ich einen Fehler haben, wenn das Datum Zeit von der Post zu haben versucht, in das Datetime-Objekt. Hier ist der Nachrichtenfehler.

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 

Und ich muss ein Datetime-Objekt zu einem gültigen E-Mail-Datumsformat analysieren.

EDIT: In meinem Skript muss ich E-Mails von den gesendeten Objekte und Posteingang Ordner vergleichen. Ich kann das Datum aus den Posteingang-E-Mails lesen (ich verwende den Befehl append an einem email.message() -Objekt) Aber ich kann die Datetime nicht von den E-Mails lesen, die von meinem SMTP mit smtplib gesendet wurden.

Ich änderte den Code ein bisschen zu sehen, was passiert: Code:

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

Prompt:

Datetime sent =None 

Ich werde sehen, wie das Datum soll in den gesendeten E-Mails umgesetzt werden . Es scheint, ich habe ein Problem hier, da die Post-Mails das Problem nicht haben.

EDIT: Ok, ich fand das Problem. Ich sende E-Mails von meinem Server an einen entfernten Server mit smtplib. Wenn der entfernte Server die Mail von meinem Server an einer bestimmten Adresse erhält, leitet er sie zurück zur ursprünglichen Adresse. Meine Skripts können das Datum der gesendeten E-Mail nicht lesen. Was ist das richtige Format, das ich für email.parsedate_tz() verwenden muss?

+0

Hat die Nachricht einen gültigen 'Date:' Header? Sie haben mehrere Funktionsaufrufe in einer Zeile; vielleicht können Sie sie über mehrere Zeilen abrollen, um zu sehen, wo genau Sie ein unerwartetes Ergebnis erhalten. Vielleicht [bearbeiten] Sie Ihre Frage, um diese Diagnose einzubeziehen. Siehe auch die Anleitung zur Aufnahme eines [mcve]. – tripleee

+0

Warum zielst du in der heutigen Zeit auf Python 2.6? Der Übergang zu 3.6 würde Ihnen eine viel aktualisierte "E-Mail" -Bibliothek mit eingebauter Datumsanalyse liefern. – tripleee

+0

Kommentar 1: Ich hatte ein schlechtes Datumsformat bei einigen E-Mails, die ich analysierte. Nach einer Bereinigung des Testpostfachs war es in Ordnung. Ich hatte Angst, ein Problem zu haben, weil andere Stack-Leute das gleiche Problem hatten. Kommentar 2: Ich kann Python auf dem Server, der das Skript ausführen wird, nicht aktualisieren. – Aurelien

Antwort

0

Ok, Also habe ich meine Parsing-Funktionen überprüft. Es funktioniert, wenn ich eine Mail von Thunderbird mit meinem SMTP-Server senden. Ich kann mein Datetime-Objekt bekommen. Stuff traf den Fan, wenn ich meine Mail mit Python sende.