您无需肮脏地破解imaplib。您可以尝试使用SocksiPy软件包,该软件包支持socks4,socks5和http代理(连接):
像这样的事情,显然,您希望通过自定义
__init__方法的额外参数来更好地处理setproxy选项。
from imaplib import IMAP4, IMAP4_SSL, IMAP4_PORT, IMAP4_SSL_PORTfrom socks import sockssocket, PROXY_TYPE_SOCKS4, PROXY_TYPE_SOCKS5, PROXY_TYPE_HTTPclass SocksIMAP4(IMAP4): def open(self,host,port=IMAP4_PORT): self.host = host self.port = port self.sock = sockssocket() self.sock.setproxy(PROXY_TYPE_SOCKS5,'socks.example.com') self.sock.connect((host,port)) self.file = self.sock.makefile('rb')您可以使用IMAP4_SSL进行类似的操作。只需小心将其包装到ssl插槽中
import sslclass SocksIMAP4SSL(IMAP4_SSL): def open(self, host, port=IMAP4_SSL_PORT): self.host = host self.port = port #actual privoxy default setting, but as said, you may want to parameterize it self.sock = create_connection((host, port), PROXY_TYPE_HTTP, "127.0.0.1", 8118) self.sslobj = ssl.wrap_socket(self.sock, self.keyfile, self.certfile) self.file = self.sslobj.makefile('rb')


