Question about email-handling modules

Robert Latest boblatest at yahoo.com
Thu Dec 20 04:31:10 EST 2007


Hello,

I'm new to Python but have lots of programming experience in C, C++ and 
Perl. Browsing through the docs, the email handling modules caught my eye 
because I'd always wanted to write a script to handle my huge, ancient, and 
partially corrupted email archives.

Of course I know that this kind of project shouldn't be tackled by a 
beginner in a language, but I still thought I'd give it a spin. 

So I wrote the stuff at the bottom. It lists senders, subjects and 
addressees of all messages in an mbox.

Things that I don't understand:

1. Why can I get the 'subject' and 'from' header field unsig the [] 
notation, but not 'to'? When I print Message.keys I get a list of all header 
fields of the message, including 'to'. What's the difference between 
message['to'] and message.get('to')?

2. Why can't I call the get_payload() method on the message? What I get is 
this cryptic error: "AttributeError: Message instance has no attribute 
'get_payload'". I'm trying to call a method here, not an attribute. It makes 
no difference if I put parentheses after get_payload or not. I looked into 
the email/Message module and found get_payload defined there. 

I don't want to waste your time by requesting that you pick apart my silly 
example. But maybe you can give me a pointer in the right direction. This is 
python 2.4 on a Debian box.

---------------------------

#!/usr/bin/python
import mailbox
import email              # doesn't make a difference
from email import Message # neither does this

mbox = file("mail.old/friends")

for message in mailbox.UnixMailbox(mbox):
    subject = message['subject']
    frm = message['from']
#    to = message['to']         # this throws a "Key Error"
    to = message.get('to');     # ...but this works
    print frm, "writes about", subject, "to", to
#    print message.get_payload() # this doesn't work

--------------------------

robert



More information about the Python-list mailing list