[Tutor] Re: email & imaplib for beginners like me

Riumu Kuraku cyresse at gmail.com
Fri Oct 15 12:48:58 CEST 2004


...edit....

Use RFC 2822 for formatting of headers in particular... RFC 2060 for
particular semantics of IMAP4 protocol.


On Thu, 14 Oct 2004 21:42:59 +1300, Riumu Kuraku <cyresse at gmail.com> wrote:
> Hi all,
> 
> (This started off as a plea for help.)
> 
> Just tryng to understand the email package, and the docs are a
> little... sparse? Maybe it's more I'm having trouble with OOP.
> 
> Anyway, here's a sequence I've learnt from frustrating trial and
> error, I'm trying to log on to a mail server, and download a message,
> and make it readable.
> 
> I thought I'd send it through in case anyone else gets stuck like me.
> I'm doing it manually so I can understand how it works before I script it.
> 
> I'm having trouble with some stuff like -
> 
> a=test.fetch(1, 'RFC822' )... The first argument of fetch is fine.
> It's the second that's got me. It's a name of a Internet standard. And
> I used it on three different emails, and it got two headers, and one
> header and full text. So I am quite confused as to how exactly to get
> specific things, like headers/text/attachments only, so any light that
> can be shed in that regard would be fantastic.
> 
> >>>import imaplib                        # IMAP protocol library
> >>>import email.Parser                # email parser library
> 
> >>>host="mail... ...com"              # IMAP server name
> >>>use="<username>"                # Your login
> >>>pas="<password>"                 # Your (plain text) password
> 
> >>>test=imaplib.IMAP4(host)        # Create instance of imap protocol connection
> 
> >>>test.login(use, pas)                  # Send login and password to server
> ('OK', ['LOGIN Welcome'])               # Server likes it
> 
> >>>test.select()                              # Selects INBOX by
> default. Good enough for me...
> ('OK', ['3'])                                       # I have 3 email messages
> 
> >>>x=test.fetch(3,'RFC822')             #Try and get message 3...
> 
> >>> print x
> ('OK', [('3 (FLAGS (\\Seen hasnoatt) RFC822 {1200}', 'Return-Path:
> <cyresse at gmail.com>\r\nReceived: from ....
>    ......<cyresse at gmail.com>\r\nReply-To: cyresse at gmail.com,
> cynos at safe-mail.net\r\nTo: protocol_test at allmail.net\r\nSubject:
> Boo\r\nMime-Version: 1.0\r\nContent-Type: text/plain;
> charset=US-ASCII\r\nContent-Transfer-Encoding:
> 7bit\r\n\r\nWhios\r\n'), ')'])
> 
> ..Looks vaguely emailish to me (bit chopped out for brevity)
> 
> >>>j=Parser            #I want to parse what I downloaded using Parser
> >>>print j.parse(x)
> 
> TypeError: unbound method parse() must be called with Parser instance
> as first argument (got tuple instance instead)
> 
> #What does that mean?
> 
> .....45 minutes later... oh....
> 
> >>>j=Parser()     # REALLY IMPORTANT to include the (), I was running
> around in circles
>                          # for a looooong time trying to figure that out.
> 
> >>>print j.parse(x)
> AttributeError: 'tuple' object has no attribute 'readline'
> 
> #OK, so x is a tuple, and it has no attr, readline...hmmm...
> #Run off to docs, and open parser.py to have a look and:
> 
> >>>print j.parsestr(x)   #Turns out, Parser.parse() is for file
> objects... Parser.parsestr()
>                                   # is for string objects, as I am
> about to learn.
> 
> TypeError: expected read buffer, tuple found
> 
> #Still not liking tuple. Hmmm...
> 
> >>>i=str(x)
> >>>print j.parsestr(i)
> 
> From nobody Thu Oct 14 21:10:42 2004
> ('OK', [('3 (FLAGS (\\Seen hasnoatt) RFC822 {1200}', 'Return-Path:
> <cyresse at gmail.com>\r\nReceived: from ....
>         .
>         .....Reply-To: cyresse at gmail.com,
>         cynos at safe-mail.net\r\nTo:
>         protocol_test at allmail.net\r\nSubject: Boo\r\nMime-Version:
>         1.0\r\nContent-Type: text/plain;
>         charset=US-ASCII\r\nContent-Trarnsfer-Encoding: 7bit\r\n\r\nWhios\r\n'),
>         ')'])
> 
> Huzzah! A header, that is easy to read! (Once again, snipped for brevity.)
> 
> Now, to reliably be able to get a whole email... I could write my own client : )
>


More information about the Tutor mailing list