Форум сайта python.su
Переопределил методы для подключения к imap и pop3 через прокси:
class SOCKS_IMAP4(imaplib.IMAP4): def __init__(self, host, port = imaplib.IMAP4_PORT,proxy_type = None, proxy = None): self.proxy = proxy self.proxy_type = proxy_type imaplib.IMAP4.__init__(self, host, port) def open(self,host,port=imaplib.IMAP4_PORT): self.host = host self.port = port self.sock = socksocket() if self.proxy and self.proxy_type: proxy_ip,proxy_port = self.proxy.split(':') self.sock.setproxy(self.proxy_type,proxy_ip,int(proxy_port)) self.sock.connect((host,port)) self.file = self.sock.makefile('rb') class SOCKS_IMAP4_SSL(imaplib.IMAP4_SSL): def __init__(self, host, port = imaplib.IMAP4_SSL_PORT,proxy_type = None, proxy = None,): self.proxy = proxy self.proxy_type = proxy_type imaplib.IMAP4_SSL.__init__(self, host, port) def open(self, host, port=imaplib.IMAP4_SSL_PORT): self.host = host self.port = port self.sock = socksocket() #actual privoxy default setting, but as said, you may want to parameterize it if self.proxy and self.proxy_type: proxy_ip,proxy_port = self.proxy.split(':') self.sock.setproxy(self.proxy_type,proxy_ip,int(proxy_port)) self.sock.connect((host,port)) self.sslobj = ssl.wrap_socket(self.sock, self.keyfile, self.certfile) self.file = self.sslobj.makefile('rb')
class SOCKS_POP3(poplib.POP3): def __init__(self, host, port=poplib.POP3_PORT,timeout=socket._GLOBAL_DEFAULT_TIMEOUT,proxy_type = None, proxy = None): self.host = host self.port = port self.sock = socksocket() if proxy and proxy_type: proxy_ip,proxy_port = proxy.split(':') self.sock.setproxy(proxy_type,proxy_ip,int(proxy_port)) self.sock.connect((host, port)) self.file = self.sock.makefile('rb') self._debugging = 0 self.welcome = self._getresp() class SOCKS_POP3_SSL(poplib.POP3_SSL): def __init__(self, host, port = poplib.POP3_SSL_PORT, keyfile = None, certfile = None,proxy_type = None, proxy = None): self.host = host self.port = port self.keyfile = keyfile self.certfile = certfile self.buffer = "" #msg = "getaddrinfo returns an empty list" self.sock = socksocket() if proxy and proxy_type: proxy_ip,proxy_port = proxy.split(':') self.sock.setproxy(proxy_type,proxy_ip,int(proxy_port)) self.sock.connect((host, port)) #for res in socket.getaddrinfo(self.host, self.port, 0, socket.SOCK_STREAM): # af, socktype, proto, canonname, sa = res # try: # self.sock = socket.socket(af, socktype, proto) # self.sock.connect(sa) # except socket.error, msg: # if self.sock: # self.sock.close() # self.sock = None # continue # break #if not self.sock: # raise socket.error, msg self.file = self.sock.makefile('rb') self.sslobj = ssl.wrap_socket(self.sock, self.keyfile, self.certfile) self._debugging = 0 self.welcome = self._getresp()
Офлайн