Extract zip file from email attachment

hlubenow hlubenow2 at gmx.net
Thu Apr 5 20:00:06 EDT 2007


erikcw wrote:

> Hi all,
> 
> I'm trying to extract zip file (containing an xml file) from an email
> so I can process it.  But I'm running up against some brick walls.
> I've been googling and reading all afternoon, and can't seem to figure
> it out.
> 
> Here is what I have so far.
> 
> p = POP3("mail.server.com")
> print p.getwelcome()
> # authentication, etc.
> print p.user("USER")
> print p.pass_("PASS")
> print "This mailbox has %d messages, totaling %d bytes." % p.stat()
> msg_list = p.list()
> print msg_list
> if not msg_list[0].startswith('+OK'):
>         # Handle error
>         exit(1)
> 
> for msg in msg_list[1]:
>         msg_num, _ = msg.split()
>         resp = p.retr(msg_num)
>         if resp[0].startswith('+OK'):
>             #print resp, '=======================\n'
>             #extract message body and attachment.
>             parsed_msg = email.message_from_string('\n'.join(resp[1]))
>             payload= parsed_msg.get_payload(decode=True)
>             print payload  #doesn't seem to work
>         else:
>                 pass# Deal with error retrieving message.
> 
> How do I:
> a) retrieve the body of the email into a string so I can do some
> processing? (I can get at the header attributes without any trouble)
> b) retrieve the zip file attachment, and unzip into a string for xml
> processing?
> 
> Thanks so much for your help!
> Erik

Hi,

some weeks ago I wrote some code to extract attachments from emails.
It's not that long, so maybe it could be of help for you:

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

#!/usr/bin/env python

import poplib
import email
import os
import sys
import string

#
# attsave.py
# Check emails at PROVIDER for attachments and save them to SAVEDIR.
#

PROVIDER = "pop.YourMailProvider.de"
USER = "YourUserName"
PASSWORD = "YourPassword"

SAVEDIR = "/home/YourUserDirectory"


def saveAttachment(mstring):

    filenames = []
    attachedcontents = []

    msg = email.message_from_string(mstring)

    for part in msg.walk():

        fn = part.get_filename()

        if fn <> None:
            filenames.append(fn)
            attachedcontents.append(part.get_payload())

    for i in range(len(filenames)):
        fp = file(SAVEDIR + "/" + filenames[i], "wb")
        fp.write(attachedcontents[i])
        print 'Found and saved attachment "' + filenames[i] + '".'
        fp.close()

try:
    client = poplib.POP3(PROVIDER)
except:
    print "Error: Provider not found."
    sys.exit(1)

client.user(USER)
client.pass_(PASSWORD)

anzahl_mails = len(client.list()[1])

for i in range(anzahl_mails):
    lines = client.retr(i + 1)[1]
    mailstring = string.join(lines, "\n")
    saveAttachment(mailstring)

client.quit()

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

See you

H.



More information about the Python-list mailing list