IMAP over SSL
Donn Cave
donn at u.washington.edu
Thu Jan 31 12:34:31 EST 2002
Quoth Silvano Maffeis <netnews at sid.maffeis.com>:
| Is it possible to establish SSL connections from
| within a Python application? In particaluar I would like
| to use the Python IMAP module over SSL.
Yes. This should work for 2.1.
Donn Cave, donn at u.washington.edu
----------------------------------------
import imaplib
import socket
import string
import sys
class SSLFile:
def __init__(self, sock):
self.sock = sock
self.client = socket.ssl(sock, None, None)
self.buffer = ''
self.eof = 0
def send(self, t, x=0):
return self.client.write(t)
def read(self, n):
if self.buffer:
r = self.buffer[:n]
self.buffer = self.buffer[n:]
n -= len(r)
else:
r = ''
if self.eof:
return r
while n > 0:
c = self.client.read(n)
if not c:
self.eof = 1
break
if len(c) <= n:
f = c
else:
f = c[:n]
self.buffer += c[n:]
n -= len(f)
r += f
return r
def write(self, t):
return self.client.write(t)
def readline(self):
while 1:
rl = self.buffer.split('\n', 1)
if len(rl) > 1:
self.buffer = rl[1]
return rl[0] + '\n'
if self.eof:
r = self.buffer
self.buffer = ''
return r
c = self.client.read()
if not c:
self.eof = 1
else:
self.buffer += c
class IMAP4(imaplib.IMAP4):
def open(self, host, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
self.sock = SSLFile(sock)
self.file = self.sock
if len(sys.argv) > 2:
p = string.atoi(sys.argv[2])
else:
p = 993
i = IMAP4(sys.argv[1], p)
print i.capabilities
More information about the Python-list
mailing list