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