如何通过代理通过 POP 或 IMAP 获取电子邮件?

2024-03-17

poplib 或 imaplib 似乎都不提供代理支持,尽管我尝试了 google-fu,但我找不到太多有关它的信息。

我正在使用 python 从各种支持 imap/pop 的服务器获取电子邮件,并且需要能够通过代理来完成此操作。

理想情况下,我希望能够直接在 python 中执行此操作,但如果我找不到更好的东西,使用包装器(外部程序/脚本,基于 OSX)强制所有流量通过代理可能就足够了。

有人可以帮我吗?我无法想象我是唯一一个需要通过 python 代理获取电子邮件的人......

** 编辑标题编辑以删除 HTTP,因为我累了时不应该打字那么快,对不起那些人 **

我计划使用的代理除了http 之外还允许socks。

通过 http 进行 Pop 或 Imap 工作没有多大意义(有状态与无状态),但我的理解是,socks 可以让我做我想做的事。

到目前为止,实现我想要的目标的唯一方法似乎是对 imaplib 进行肮脏的黑客攻击......如果可以的话,我宁愿避免它。


你不需要对 imaplib 进行肮脏的修改。你可以尝试使用SocksiPy包,它支持socks4、socks5和http代理(连接):

像这样的东西,显然你想通过自定义的额外参数更好地处理 setproxy 选项__init__方法等

from imaplib import IMAP4, IMAP4_SSL, IMAP4_PORT, IMAP4_SSL_PORT
from socks import sockssocket, PROXY_TYPE_SOCKS4, PROXY_TYPE_SOCKS5, PROXY_TYPE_HTTP

class 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 ssl

class 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')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过代理通过 POP 或 IMAP 获取电子邮件? 的相关文章

随机推荐