2017-08-21 31 views
0

Ich versuche ein Skript zu schreiben, das mir den Inhalt aller Mails in ~/Maildir bekommt. Also kopierte ich grundsätzlich Code von this question. Hier ist der vollständige Inhalt der mailbox.py:Nachrichteninstanz hat kein Attribut 'is_multipart'

import mailbox 
maildir = mailbox.Maildir("~/Maildir"); 
for message in maildir: 
    print message["subject"] 
    if message.is_multipart(): 
     print "ok" 

es das Thema der ersten Nachricht kann nicht gedruckt werden, aber statt Druck „ok“ dann, es stirbt unter Angabe

AttributeError: Message instance has no attribute 'is_multipart' 

Was habe ich falsch gemacht?

+0

könnten Sie ein Beispiel für eine Datei in '~/MailDir' geben? – glS

+0

['is_multipart()'] (https://docs.python.org/2/library/email.message.html#email.message.Message.is_multipart) ist eine Methode von ['email.message.Message'] (https://docs.python.org/2/library/email.message.html#email.message.Message), so dass Sie ein 'email.message.Message'-Objekt benötigen, um es anzuwenden. Was ist die Art von "Nachricht"? – user2314737

+0

@ user2314737: vermutlich ist dies das ['mailbox' Modul] (https://docs.python.org/3/library/mailbox.html) in der stdlib, also [diese Klasse] (https: //docs.python .org/3/library/mailbox.html # mailbox.Message), eine Unterklasse von 'email.message.Message' .. –

Antwort

1

Sie haben vergessen, Ihre Python-Version zu nennen, also lassen Sie mich raten - es ist Python 2.7, oder? In Python 2.7 mailbox.Maildir standardmäßig returns Instanzen von rfc822.Messages, nicht email.Message s; rfc822.Message hat eine ganz andere API.

Wenn Sie mailbox.Maildir wollen email.Message s Entfernen Standard factory zurückzukehren:

maildir = mailbox.Maildir("~/Maildir", factory=None) 

In Python 3 rfc822.Message wurde entfernt, so mailbox.Maildir kehrt email.Message s standardmäßig.

+0

Sie haben es verstanden. Wenn ich es mit 'python3 mailbox.py' starte, funktioniert es wie erwartet. Danke, dass du mich darauf hingewiesen hast. – mcnesium