Robert Latest wrote: > 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')?
On dicts, and presumably on Messages too, .get returns a default value (None, or you can specify another with .get("key", "default") if the key doesn't exist. I can't say why ['to'] doesn't work when it's in the list of keys, though. > 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. Methods are attributes. When you do "obj.method()", "obj.method" and "()" are really two separate things: It gets the "method" attribute of "obj", and then calls it. > 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 (Oops, I wrote this like half an hour ago, but I never sent it.) -- -- http://mail.python.org/mailman/listinfo/python-list