Re: [pyar] Error con imap

Página superior
Adjuntos:
+ (text/plain)
+ emailimap.py (text/x-python)
+ signature.asc (application/pgp-signature)
+ (text/plain)

Responder a este mensaje
Autor: Juan Pablo Alesandri
Fecha:  
A: Python Argentina
Asunto: Re: [pyar] Error con imap
El lun, 10-01-2011 a las 21:31 -0300, Martin Cerdeira escribió:
> 2011/1/10 Juan Pablo Alesandri <jpadebian@???>:
> > Hola gente, buenas tardes. estoy teniendo inconvenientes con el
> > siguiente programa que adjunto.
> > El objetivo del programa es acceder a una cuenta en gmail y descargar
> > los archivos adjuntos que llegan en los mails.
> > Yo se de antemano que por cada mail que llegue a esa cuenta voy a tener
> > 6 archivos.
> > Me pasaron por este medio un programa que me puede llegar a servir(es el
> > que adjunto) y el error que tira es el siguiente:
> >
> > Traceback (most recent call last):
> > File "emailimap.py", line 13, in <module>
> > resp, items = m.search(None, "ALL") # you could filter using the
> > IMAP rules here (check
> > http://www.example-code.com/csharp/imap-search-critera.asp)
> > File "/usr/lib/python2.6/imaplib.py", line 620, in search
> > typ, dat = self._simple_command(name, *criteria)
> > File "/usr/lib/python2.6/imaplib.py", line 1058, in _simple_command
> > return self._command_complete(name, self._command(name, *args))
> > File "/usr/lib/python2.6/imaplib.py", line 818, in _command
> > ', '.join(Commands[name])))
> > imaplib.error: command SEARCH illegal in state AUTH, only allowed in
> > states SELECTED
> >
> > Espero que me puedan dar una mano y desde ya muchas gracias
> >
> > --
> > Saludos
> > Juan Pablo Alesandri
> > GNU/Linux Registered User:#333844
> > GnuPG Public Key ID: 8A2B7F96
> > ---
> >
> > _______________________________________________
> > pyar mailing list pyar@???
> > http://listas.python.org.ar/listinfo/pyar
> >
> > PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
> >
>
> Hola! Si podés, mandate el script así lo vemos.
>
> Por el error que ponés, visto así a groso modo (es decir, sin ir a
> consultar el protocolo ni googlear nada) parece un problema de
> protocolo, justamente.
> Fijate que dice que está mandando un comando SEARCH que es ilegal en
> el estado actual.

pido disculpas por el error de no adjuntar el script. Aca va
gracias!

-- 
Saludos
Juan Pablo Alesandri
GNU/Linux Registered User:#333844
GnuPG Public Key ID: 8A2B7F96
---

import email, getpass, imaplib, os

detach_dir = '.' # directory where to save attachments (default: current)
user = raw_input("Enter your GMail username:")
pwd = getpass.getpass("Enter your password: ")

# connecting to the gmail imap server
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user,pwd)
m.select("[Gmail]/All Mail") # here you a can choose a mail box like INBOX instead
# use m.list() to get all the mailboxes

#jpa-inicio-10/01/2011
# you could filter using the IMAP rules here (check http://www.example-code.com/csharp/imap-search-critera.asp)
resp, items = m.search(None, "ALL")
#resp, items = m.search(None, '(From "alesandri@???")')
#jpa-fin-10-01-2011

items = items[0].split() # getting the mails id

for emailid in items:
resp, data = m.fetch(emailid, "(RFC822)") # fetching the mail, "`(RFC822)`" means "get the whole stuff", but you can ask for headers only, etc
email_body = data[0][1] # getting the mail content
mail = email.message_from_string(email_body) # parsing the mail content to get a mail object

#Check if any attachments at all
if mail.get_content_maintype() != 'multipart':
continue

print "["+mail["From"]+"] :" + mail["Subject"]

# we use walk to create a generator so we can iterate on the parts and forget about the recursive headach
for part in mail.walk():
# multipart are just containers, so we skip them
if part.get_content_maintype() == 'multipart':
continue

# is this part an attachment ?
if part.get('Content-Disposition') is None:
continue

filename = part.get_filename()
counter = 1

# if there is no filename, we create one with a counter to avoid duplicates
if not filename:
filename = 'part-%03d%s' % (counter, 'bin')
counter += 1

att_path = os.path.join(detach_dir, filename)

#Check if its already there
if not os.path.isfile(att_path) :
# finally write the stuff
fp = open(att_path, 'wb')
fp.write(part.get_payload(decode=True))
fp.close()

_______________________________________________
pyar mailing list pyar@???
http://listas.python.org.ar/listinfo/pyar

PyAr - Python Argentina - Sitio web: http://www.python.org.ar/