
Hello all, I have this imap4 client http://www.pastebin.com/m4e387f1a most of the code is barrowed from a IRC friend, bob_f , it works fine but as soon as more that 1 email arrrives to the inbox, it only prints the first new messages but not the others, I wonder what am I doing wrong Thanks a lot Here is the code: #!/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 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 = 1 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.fetchMessage("%s:*" % (unseen) ).addCallback(self.cbProcMessages) def cbProcMessages(self,messages): print messages 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() -- http://celord.blogspot.com/