[Python-es] Problema con imap4 de twisted

César García celord en gmail.com
Lun Feb 22 21:40:08 CET 2010


Que estraño, juraria que si puse el codigo :)
aca va:

http://www.pastebin.com/m4e387f1a

#!/usr/bin/env python
#coding=utf-8


"""
Client de IMAP4 que descarga contenido del INBOX de una cuenta en especifico
para luego extraer el numero de telefono que debe venir en los correos enviados
"""

import StringIO
import sys
from Config import retCredentials
import messageParser

from twisted.internet.task import LoopingCall
from twisted.internet import protocol
from twisted.internet import defer
from twisted.mail import imap4
from twisted.python import util
from twisted.python import log
from twisted.internet import reactor
debug = 0

class IMAP4Client(imap4.IMAP4Client):

    def serverGreeting(self,caps):
        """
        Metodo llamado cuando el servidor contesta
        """
        if debug: print "On serverGreeting"

        self.serverCapabilities = caps
        if self.greetDeferred is not None:
            d, self.greetDeferred = self.greetDeferred, None
            d.addCallback(self.cbLogin)
            d.callback(self)


    def cbLogin(self, proto):
        """
        Callback to IMAP login
        """
        if debug: print "On Login"

        login =  self.login(self.factory.username, self.factory.password)
        login.addCallback(self.startPolling)


    def startPolling(self, proto):
        """
        Callback to poll every x seconds
        """
        call = LoopingCall(self.selectMailbox,mailbox="INBOX")
        call.start(20, now=True)


    def selectMailbox(self, mailbox):
        """
        Select the mailbox to examin
        """
        if debug: print "On selectMailbox"

        mailbox = self.factory.mailbox
        return self.select(mailbox).addCallback(self.cbSelectSuccess)


    def cbSelectSuccess(self, selected):
        """
        Examine the INBOX mailbox for new mails

        """
        if debug: print "On cbSelectSuccess"


        self.messageCount = selected['EXISTS']
        print "Messages: ", self.messageCount

        unseen = selected['EXISTS'] - selected['RECENT']

        if selected['RECENT'] == 0:
            print "No new messages"
            return

        return self.fetchBody("%s:*" % (unseen,)
                ).addCallback(self.cbProcMessages)

    def cbProcMessages(self,messages):


        for message in messages.iteritems():
            message[1]['RFC822.TEXT']


class IMAP4ClientFactory(protocol.ClientFactory):

    protocol = IMAP4Client

    def __init__(self, username, password,  onConn):

        self.username = username
        self.password = password
        self.mailbox = 'INBOX'
        self.onConn = onConn

    def buildProtocol(self,addr):
        if debug: print "On buildProtocol"
        p = self.protocol()
        p.factory = self
        p.greetDeferred = self.onConn
        auth = imap4.CramMD5ClientAuthenticator(self.username)
        p.registerAuthenticator(auth)

        return p

    def clientConectionFailed(self, connector, reason):
        d, self.onConn = self.onConn, None
        d.errback(reason)



def ebConnection(reason):
    log.startLogging(sys.stdout)
    log.err(reason)
    reactor.stop()



PORT = 143
RESULT = "INBOX"


def main():
    credentials = retCredentials()
    hostname = credentials['server']
    username = credentials['mailbox']
    password = util.getPassword('IMAP4 Password: ')

    onConn = defer.Deferred(
            ).addErrback(ebConnection
            )

    factory = IMAP4ClientFactory(username, password, onConn)


    reactor.connectTCP(hostname, PORT, factory)
    reactor.run()

if  __name__ == "__main__":
    main()

El día 22 de febrero de 2010 13:00, lasizoillo <lasizoillo en gmail.com> escribió:
> El día 22 de febrero de 2010 19:43, César García <celord en gmail.com> escribió:
>> Hola lista, tengo un cliente imap4 uso twisted todo funciona bien,
>> mientras solo llegue 1 email entre cada loop, el cual lo tengo
>> configurado que se ejecute cada 20 segundos, si llegan mas de 1 email
>> la aplicación solo descarga el primero, dejando los otros como
>> "leidos", pero si procesar, me pregunto si alguien de la lista tiene
>> experiencia con imap4 con twisted
>>
>> Acá el código:
>>
>
> Yo tengo experiencia con el imap4 de twisted (aunque hace algún tiempo
> que no lo toco). La pregunta del millón es: ¿Dónde has dicho que está
> el código?
>
> Un saludo:
>
> Javi
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



-- 
http://celord.blogspot.com/



Más información sobre la lista de distribución Python-es