当前位置: 首页 > 面试题库 >

Python-如何通过代理通过POP或IMAP提取电子邮件?

岳风畔
2023-03-14
问题内容

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

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

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

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

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

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

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

到目前为止,实现我想要的唯一方法似乎是对imaplib的恶意入侵……如果可以的话,宁愿避免使用它。


问题答案:

您无需肮脏地破解imaplib。您可以尝试使用SocksiPy软件包,该软件包支持socks4,socks5和http代理(连接):

像这样的事情,显然,您希望通过自定义__init__方法的额外参数来更好地处理setproxy选项。

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')


 类似资料:
  • 因此,我实际上是试图通过IMAP使用Node连接到Outlook/Exchange电子邮件帐户。 使用旧的Live Connect API,我可以使用OAuth2令牌(https://msdn.microsoft.com/en-us/windows/desktop/DN440163)执行IMAP命令。但这似乎对Exchange帐户不起作用,因为试图用这些帐户执行Oauth流只会带来一个错误“此Mi

  • 问题内容: 我正在使用。 使用发送电子邮件(通过)的最佳方法是什么? 问题答案: 有关使用Outlook的解决方案,请参见下面的TheoretiCAL答案。 否则,请使用python随附的smtplib。请注意,这将要求您的电子邮件帐户允许smtp,默认情况下不一定启用此功能。 编辑: 此示例使用保留域,如RFC2606中所述 为了使它真正与gmail配合使用,Doe先生需要进入gmail中的选项

  • 问题内容: 我想对Elasticsearch的电子邮件或电话进行模糊匹配。例如: 匹配所有以结尾的电子邮件 要么 匹配所有电话开头。 我知道我可以使用通配符 但是性能很差。我尝试使用regexp: 但是不起作用。 有更好的方法吗? curl -XGET本地主机:9200 / user_data 映射: 问题答案: 一种简单的方法是创建一个自定义分析器,该分析器使用电子邮件的n-gram令牌过滤器(

  • 问题内容: 在我的中,我具有以下内容: 我的电子邮件代码: 当然,如果通过设置调试服务器,则可以在终端中看到该电子邮件。 但是,我实际上如何不将电子邮件发送到调试服务器,而是发送到user@gmail.com? 阅读你的答案后,让我弄明白一点: 你不能使用localhost(简单的ubuntu pc)发送电子邮件吗? 我认为在django 1.3中已经过时了,取而代之的是? 问题答案: 将电子邮件

  • 我们的平台定期检查我们的一些客户邮箱,寻找回复的电子邮件,到目前为止,它一直运行良好,但我们最近遇到了一个奇怪问题的客户。 当我连接到IMAP服务器并在给定的时间段内搜索电子邮件时(例如昨天的所有邮件),我只得到一个空列表。但是,当我在其邮箱上与客户核对时,我可以看到昨天收到的邮件。她的邮件客户端配置为使用POP,所以我要求她更改为IMAP,因为POP应该从邮件服务器中删除电子邮件。现在她正在使用

  • 我正在使用JavaMail API在J中发送电子邮件。如果我在没有代理的情况下通过网络使用它,效果很好,但我们学院使用代理服务器,这就是为什么它在学院不起作用的原因。我认为我们的大学代理服务器只支持HTTP和HTTPS代理,不支持SOCKS代理。我用过 我还试着设置 但它仍然不起作用,出现了类似这样的错误 我知道JavaMail不支持通过web代理服务器访问邮件服务器。请告诉我如何重新爱上它?或者