parsing downloaded mail via POP3

Gerard Flanagan grflanagan at yahoo.co.uk
Wed Mar 22 17:05:12 EST 2006


Kevin F wrote:

> I have the following script:
>
> emails = []
> for msg in messagesInfo:
>          msgNum = int(msg.split()[0])
>          msgSize = int(msg.split()[1])
>          if(msgSize < 20000):
>             message = server.retr(msgNum)[1]
>             Message = join(message, "\n")
> emails.append(message)
>
>
> It downloads messages for me via my POP3 server, however, the message
> format (attached below) includes ridiculous amounts of data and I just
> want to return the from, subject, and body.  Any pointers on how to do this?
>

Have you tried server.top ?

    MAX_SUMMARY_LINES = 20

    def get_headers(self):
        server = poplib.POP3(self.server_name)
        server.user(self.user_name)
        server.pass_(self.password)
        hdrs = []
        try:
            msgCount, msgBytes = server.stat()
            for i in range(msgCount):
                msgNum = i+1
                hdr, message, octets = server.top(msgNum,
MAX_SUMMARY_LINES)
                hdrs.append(message)
        finally:
            server.quit()

alternatively, something like:


import poplib, email
from email.Utils import getaddresses, parseaddr

    def download_mail(self):
        server = poplib.POP3(self.server_name)
        server.user(self.user_name)
        server.pass_(self.password)
        try:
            msgCount, msgBytes = server.stat()
            self.messages = []
            for i in range(msgCount):
                msgNum = i+1
                hdr, message, octets = server.retr(msgNum)
                mail_msg = '\n'.join( message)
                self.messages.append(
email.message_from_string(mail_msg) )
        finally:
            server.quit()

    def print_headers(self):
        for message in self.messages:
            print '#' * 80
            print parseaddr( message['from'] )
            print message['subject']
            print message['date']
            print getaddresses( message.get_all('to', []) )
            print getaddresses( message.get_all('cc', []) )

Gerard




More information about the Python-list mailing list