2017-08-21 4 views
0

J'essaye d'écrire un script qui m'obtient le contenu de tous les messages dans ~/Maildir. Donc, j'ai fondamentalement copypédé le code de this question. Voici le contenu complet de mailbox.py:L'instance de message n'a pas d'attribut 'is_multipart'

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

Il n'imprime le sujet du premier message, mais au lieu d'imprimer « ok » puis, il meurt en indiquant

AttributeError: Message instance has no attribute 'is_multipart' 

Qu'est-ce que je fait de mal?

+0

pourriez-vous donner un exemple de fichier dans '~/MailDir'? – glS

+0

['is_multipart()'] (https://docs.python.org/2/library/email.message.html#email.message.Message.is_multipart) est une méthode de ['email.message.Message'] (https://docs.python.org/2/library/email.message.html#email.message.Message), vous avez donc besoin d'un objet 'email.message.Message' pour l'appliquer. Quel est le type de 'message'? – user2314737

+0

@ user2314737: il s'agit vraisemblablement du module ['mailbox'] (https://docs.python.org/3/library/mailbox.html) dans stdlib, donc [this class] (https: //docs.python .org/3/library/mailbox.html # mailbox.Message), une sous-classe de 'email.message.Message' .. –

Répondre

1

Vous avez oublié de nommer votre version de Python alors laissez-moi deviner - c'est Python 2.7, non? En Python 2.7 mailbox.Maildir par défaut returns instances de rfc822.Messages, pas email.Message s; rfc822.Message a un complètement différent API.

Si vous voulez mailbox.Maildir retourner email.Message s supprimer par défaut factory:

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

En Python 3 rfc822.Message a été retiré afin mailbox.Maildir retours email.Message s par défaut.

+0

Vous l'avez. quand je le lance en utilisant 'python3 mailbox.py' cela fonctionne comme prévu. Merci de m'avoir indiqué. – mcnesium