2010-08-02 57 views
5

poplib或imaplib似乎都不提供代理支持,尽管我尝试了google-fu,但无法找到关于它的更多信息。Python - 如何通过代理通过POP或IMAP获取电子邮件?

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

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

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

**编辑标题编辑删除HTTP,因为我不应该输入这么快,当我累了,对不起那家伙**

我打算使用的代理服务器允许袜子除了http。

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

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

+1

我很好奇:你如何通过一个http代理隧道即使没有python imap? – hop 2010-08-02 10:20:15

+0

从标题中删除了http,我的错误,意味着袜子... – Vermillon 2010-08-02 10:47:49

回答

0

如果我正确理解你的话,你正在试图把一个方形的钉子放在一个圆形的洞里。

HTTP代理只知道如何“说话”HTTP,因此无法直接连接到POP或IMAP服务器。

如果你想要做到这一点,你需要在某个地方实现你自己的服务器来与邮件服务器交谈。它会收到HTTP请求,然后对邮件服务器进行相应的调用。例如: -

如何实践,这将是我不知道,因为你必须有状态的协议转换成stateless之一。

+0

你100%正确,我忘了提及袜子的能力。我从标题中删除了HTTP,对不起,我很累; p – Vermillon 2010-08-02 10:47:29

+3

HTTP代理的'CONNECT'方法可以让你运行任何tcp client-> server协议。 * IF * HTTP代理允许它,大多数默认配置限制'连接'请求端口443. – MattH 2010-08-02 10:54:59

+0

我明白你的意思,但thunderbird如何通过HTTP代理连接呢? – 2012-01-31 18:06:27

4

答包装成一个SSL套接字我自己的问题...... 有一个快速和肮脏的方式来强制TRAFIC从python脚本使用Socksipy去通过代理毫不费力(感谢MattH指着我这样)

import socks 
import socket 
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4,proxy_ip,port,True) 
socket.socket = socks.socksocket 

这全球插座覆盖显然有点残酷,但是直到我找到时间来正确子IMAP4和IMAP4_SSL可以作为一个快速解决。

+0

+1它也适用于SMTP_SSL:D – alexandrul 2012-01-23 11:30:02

+0

没有为我工作,我得到了“IOError:[Errno套接字错误]('超时'),任何建议? – ImadOS 2014-11-26 17:00:29

相关问题