Re: [Twisted-Python] Need working examples of imap4 client.
Phil, Much obliged. Was able to isolate and confirm that the real issue is that login is hanging for some reason, and causing the timeout message. I suspect SSL/TLS issues, which at least gives me a decided place to start investigating. Thanks again for the code, it was sanity inducing to say the least. ;) Phil Mayers wrote:
Pywinder Singh wrote:
Ideally, I'd love to see a snipped which is able to log into an imap server and gets a list of mailboxes. If the example on the site works
Here you go:
#!/usr/bin/python
from twisted.internet import reactor, protocol, defer from twisted.mail import imap4
# change these... username = '?' password = '?' servername = '?'
def mailboxes(list): for flags,sep,mbox in list: print mbox
def loggedin(res, proto): d = proto.list('','*') d.addCallback(mailboxes) return d
def connected(proto): print "connected", proto d = proto.login(username, password) d.addCallback(loggedin, proto) return d
def failed(f): print "failed", f return f
def done(_): reactor.callLater(0, reactor.stop)
def main(): c = protocol.ClientCreator(reactor, imap4.IMAP4Client) d = c.connectTCP(servername, 143) d.addCallbacks(connected, failed) d.addBoth(done)
reactor.callLater(0, main) reactor.run()
This example makes use of deferred chaining i.e. returning a deferred from a callback handler, so you'll want to understand that.
Hi,
I've wondered myself how to do this, so thanks Phil.
I extended Phil's solution to work with Gmail, which boils
down to using SSL and setting the correct servername and port, see here:
http://gist.github.com/128521
Pywinder, you should be able to just change the username/password
and it will work for you (you might have to have the python ssl module
installed - post again if that is the case and it's not working for you)
How to do useful stuff with the 'mailboxes' function in the script is
another question (which I dont know the answer to). Maybe post
your usage if you have a chance.
-Alex
On Thu, Jun 11, 2009 at 5:45 PM, Pywinder
Singh
Phil,
Much obliged.
Was able to isolate and confirm that the real issue is that login is hanging for some reason, and causing the timeout message. I suspect SSL/TLS issues, which at least gives me a decided place to start investigating.
Thanks again for the code, it was sanity inducing to say the least. ;)
Phil Mayers wrote:
Pywinder Singh wrote:
Ideally, I'd love to see a snipped which is able to log into an imap server and gets a list of mailboxes. If the example on the site works
Here you go:
#!/usr/bin/python
from twisted.internet import reactor, protocol, defer from twisted.mail import imap4
# change these... username = '?' password = '?' servername = '?'
def mailboxes(list): for flags,sep,mbox in list: print mbox
def loggedin(res, proto): d = proto.list('','*') d.addCallback(mailboxes) return d
def connected(proto): print "connected", proto d = proto.login(username, password) d.addCallback(loggedin, proto) return d
def failed(f): print "failed", f return f
def done(_): reactor.callLater(0, reactor.stop)
def main(): c = protocol.ClientCreator(reactor, imap4.IMAP4Client) d = c.connectTCP(servername, 143) d.addCallbacks(connected, failed) d.addBoth(done)
reactor.callLater(0, main) reactor.run()
This example makes use of deferred chaining i.e. returning a deferred from a callback handler, so you'll want to understand that.
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
-- Alex Clemesha clemesha.org
Alex,
That link was invaluable.
Twisted docs + project deadlines + my own ignorance = I completely had the
wrong idea about how to set up SSL. Code worked like a charm, and now I'm
very happy not to have to finish the project using python's native imaplib.
I'll certainly share the fruits of my labour with this list.
Thanks again....
On Fri, Jun 12, 2009 at 4:40 AM, Alex Clemesha
Hi,
I've wondered myself how to do this, so thanks Phil.
I extended Phil's solution to work with Gmail, which boils down to using SSL and setting the correct servername and port, see here: http://gist.github.com/128521
Pywinder, you should be able to just change the username/password and it will work for you (you might have to have the python ssl module installed - post again if that is the case and it's not working for you)
How to do useful stuff with the 'mailboxes' function in the script is another question (which I dont know the answer to). Maybe post your usage if you have a chance.
-Alex
On Thu, Jun 11, 2009 at 5:45 PM, Pywinder Singh
wrote: Phil,
Much obliged.
Was able to isolate and confirm that the real issue is that login is hanging for some reason, and causing the timeout message. I suspect SSL/TLS issues, which at least gives me a decided place to start investigating.
Thanks again for the code, it was sanity inducing to say the least. ;)
Phil Mayers wrote:
Pywinder Singh wrote:
Ideally, I'd love to see a snipped which is able to log into an imap server and gets a list of mailboxes. If the example on the site works
Here you go:
#!/usr/bin/python
from twisted.internet import reactor, protocol, defer from twisted.mail import imap4
# change these... username = '?' password = '?' servername = '?'
def mailboxes(list): for flags,sep,mbox in list: print mbox
def loggedin(res, proto): d = proto.list('','*') d.addCallback(mailboxes) return d
def connected(proto): print "connected", proto d = proto.login(username, password) d.addCallback(loggedin, proto) return d
def failed(f): print "failed", f return f
def done(_): reactor.callLater(0, reactor.stop)
def main(): c = protocol.ClientCreator(reactor, imap4.IMAP4Client) d = c.connectTCP(servername, 143) d.addCallbacks(connected, failed) d.addBoth(done)
reactor.callLater(0, main) reactor.run()
This example makes use of deferred chaining i.e. returning a deferred from a callback handler, so you'll want to understand that.
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
-- Alex Clemesha clemesha.org
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
A very belated reply...
Thanks again for the code. From there, I was able to make a tool to clone
imap mailboxes from server to server. Right now, it's a beast held together
with rubber bands, and completely ignores use of a lot of other twisted
practices and conveniences (application, connection persistance, etc...).
At some point I'll clean it up and share, but in the mean time, if anybody
has any specific questions, let me know and I'll be happy to share what I
learned.
On Fri, Jun 12, 2009 at 4:40 AM, Alex Clemesha
Hi,
I've wondered myself how to do this, so thanks Phil.
I extended Phil's solution to work with Gmail, which boils down to using SSL and setting the correct servername and port, see here: http://gist.github.com/128521
Pywinder, you should be able to just change the username/password and it will work for you (you might have to have the python ssl module installed - post again if that is the case and it's not working for you)
How to do useful stuff with the 'mailboxes' function in the script is another question (which I dont know the answer to). Maybe post your usage if you have a chance.
-Alex
On Thu, Jun 11, 2009 at 5:45 PM, Pywinder Singh
wrote: Phil,
Much obliged.
Was able to isolate and confirm that the real issue is that login is hanging for some reason, and causing the timeout message. I suspect SSL/TLS issues, which at least gives me a decided place to start investigating.
Thanks again for the code, it was sanity inducing to say the least. ;)
Phil Mayers wrote:
Pywinder Singh wrote:
Ideally, I'd love to see a snipped which is able to log into an imap server and gets a list of mailboxes. If the example on the site works
Here you go:
#!/usr/bin/python
from twisted.internet import reactor, protocol, defer from twisted.mail import imap4
# change these... username = '?' password = '?' servername = '?'
def mailboxes(list): for flags,sep,mbox in list: print mbox
def loggedin(res, proto): d = proto.list('','*') d.addCallback(mailboxes) return d
def connected(proto): print "connected", proto d = proto.login(username, password) d.addCallback(loggedin, proto) return d
def failed(f): print "failed", f return f
def done(_): reactor.callLater(0, reactor.stop)
def main(): c = protocol.ClientCreator(reactor, imap4.IMAP4Client) d = c.connectTCP(servername, 143) d.addCallbacks(connected, failed) d.addBoth(done)
reactor.callLater(0, main) reactor.run()
This example makes use of deferred chaining i.e. returning a deferred from a callback handler, so you'll want to understand that.
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
-- Alex Clemesha clemesha.org
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
participants (2)
-
Alex Clemesha
-
Pywinder Singh