首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过代理通过POP或IMAP获取电子邮件?

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

Stack Overflow用户
提问于 2010-08-02 18:06:46
回答 3查看 12.9K关注 0票数 11

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

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

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

有人能帮我一下吗?我无法想象我是唯一一个需要通过python中的代理来获取电子邮件的人……

*

*

编辑标题编辑以删除HTTP,因为我不应该在累的时候打字这么快,对此我很抱歉

*

*

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

Pop或Imap通过http工作没有多大意义(有状态与无状态),但我的理解是,socks将允许我做我想做的事情。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-02 19:24:11

你不需要破解imaplib。您可以尝试使用支持socks4、socks5和http代理(连接)的SocksiPy包:

类似这样的情况,显然您希望通过自定义的额外参数更好地处理setproxy选项

方法等。

代码语言:javascript
复制
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套接字中即可

代码语言:javascript
复制
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')
票数 13
EN

Stack Overflow用户

发布于 2010-08-02 20:48:46

回答我自己的问题..。有一种快速而肮脏的方法可以使用Socksipy从python脚本强制传输到代理,而不是麻烦(感谢MattH为我指出了这一点)。

代码语言:javascript
复制
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4,proxy_ip,port,True)
socket.socket = socks.socksocket

这种全局套接字覆盖显然有点残酷,但在我找到合适的子类IMAP4和IMAP4之前,它可以作为一种快速修复方法

_

SSL。

票数 7
EN

Stack Overflow用户

发布于 2010-08-02 18:20:29

如果我没理解错的话,你是想把一个方形的钉子钉在一个圆孔里。

HTTP代理只知道如何“对话”HTTP,所以不能直接连接到POP或IMAP服务器。

如果你想这样做,你需要在某个地方实现你自己的服务器来与邮件服务器通信。它将接收HTTP请求,然后对邮件服务器进行适当的调用。例如:

我不知道这有多实用,因为您必须将有状态协议转换为

无状态

一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3386724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档