#!/usr/bin/env python from SocketServer import StreamRequestHandler, TCPServer, ThreadingMixIn import imaplib import socket import ssl import sys import threading # Must have a certificate for the server to use # openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem CERTFILE='cert.pem' class SecureTCPServer(TCPServer): def get_request(self): newsocket, fromaddr = self.socket.accept() connstream = ssl.wrap_socket(newsocket, server_side=True, certfile=CERTFILE) return connstream, fromaddr class ThreadedSecureTCPServer(ThreadingMixIn, SecureTCPServer): pass class IMAPHandler(StreamRequestHandler): def handle(self): # EOF without sending a complete welcome message self.wfile.write('* OK') # self.wfile.write('\r\n') # The missing line terminator def client(host, port): sys.stdout.write('Connecting to the IMAP server...') sys.stdout.flush() server = imaplib.IMAP4_SSL(host, port) sys.stdout.write(' done\n') HOST, PORT = 'localhost', 0 server = ThreadedSecureTCPServer((HOST, PORT), IMAPHandler) host, port = server.server_address server_thread = threading.Thread(target=server.serve_forever) server_thread.setDaemon(True) server_thread.start() client(host, port)