Python IMAP 设置代理

IMAP设置代理

from imaplib import IMAP4
from imaplib import IMAP4_PORT
from imaplib import IMAP4_SSL_PORT


class SocksIMAP4(IMAP4):
    """
    IMAP service trough SOCKS proxy. PySocks module required.
    """

    PROXY_TYPES = {"socks4": PROXY_TYPE_SOCKS4,
                   "socks5": PROXY_TYPE_SOCKS5,
                   "http": PROXY_TYPE_HTTP}

    def __init__(self, host, port=IMAP4_PORT, proxy_addr=None, proxy_port=None,
                 rdns=True, username=None, password=None, proxy_type="socks5"):

        self.proxy_addr = proxy_addr
        self.proxy_port = proxy_port
        self.rdns = rdns
        self.username = username
        self.password = password
        self.proxy_type = SocksIMAP4.PROXY_TYPES[proxy_type.lower()]

        IMAP4.__init__(self, host, port)

    def _create_socket(self):
        return create_connection((self.host, self.port), proxy_type=self.proxy_type, proxy_addr=self.proxy_addr,
                                 proxy_port=self.proxy_port, proxy_rdns=self.rdns, proxy_username=self.username,
                                 proxy_password=self.password)


class SocksIMAP4SSL(SocksIMAP4):

    def __init__(self, host='', port=IMAP4_SSL_PORT, keyfile=None, certfile=None, ssl_context=None, proxy_addr=None,
                 proxy_port=None, rdns=True, username=None, password=None, proxy_type="socks5"):

        if ssl_context is not None and keyfile is not None:
                raise ValueError("ssl_context and keyfile arguments are mutually "
                                 "exclusive")
        if ssl_context is not None and certfile is not None:
            raise ValueError("ssl_context and certfile arguments are mutually "
                             "exclusive")

        self.keyfile = keyfile
        self.certfile = certfile
        if ssl_context is None:
            ssl_context = ssl._create_stdlib_context(certfile=certfile,
                                                     keyfile=keyfile)
        self.ssl_context = ssl_context

        SocksIMAP4.__init__(self, host, port, proxy_addr=proxy_addr, proxy_port=proxy_port,
                            rdns=rdns, username=username, password=password, proxy_type=proxy_type)

    def _create_socket(self):
        sock = SocksIMAP4._create_socket(self)
        server_hostname = self.host if ssl.HAS_SNI else None
        return self.ssl_context.wrap_socket(sock, server_hostname=server_hostname)

    def open(self, host='', port=IMAP4_PORT):
        SocksIMAP4.open(self, host, port)

使用得时候:

server = SocksIMAP4SSL(host=xxx, port=xxx,proxy_addr=xxx, proxy_port=xxx, proxy_type=xxx)

IMAP socket error: EOF

具体错误为:imaplib.abort: command: STATUS => socket error: EOF
解决方案是重新实例化类,再重新登录

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
IMAP(Internet Message Access Protocol)是一种用于接收和管理电子邮件的协议。Python中,你可以使用`imaplib`库来连接到邮箱服务器并执行IMAP操作。 下面是一些常见的Python IMAP操作示例: 1. 连接到邮箱服务器: ```python import imaplib # 邮箱登录凭证 email = 'your_email@example.com' password = 'your_password' # 邮箱服务器的地址和端口 imap_server = 'imap.example.com' port = 993 # 连接到邮箱服务器 imap = imaplib.IMAP4_SSL(imap_server, port) # 登录到邮箱 imap.login(email, password) ``` 2. 选择邮箱文件夹: ```python # 选择邮箱文件夹(例如INBOX) imap.select('INBOX') ``` 3. 搜索邮件: ```python # 搜索未读邮件 status, response = imap.search(None, 'UNSEEN') # 获取未读邮件的ID列表 unread_email_ids = response[0].split() # 搜索特定主题的邮件 status, response = imap.search(None, 'SUBJECT "example"') ``` 4. 获取邮件内容: ```python # 获取邮件内容 status, response = imap.fetch(email_id, '(RFC822)') raw_email = response[0][1] # 在这里你可以对邮件进行处理,比如解析内容、提取附件等 ``` 5. 标记邮件为已读: ```python # 标记邮件为已读 imap.store(email_id, '+FLAGS', '\\Seen') ``` 6. 删除邮件: ```python # 删除邮件 imap.store(email_id, '+FLAGS', '\\Deleted') # 标记删除的邮件 imap.expunge() ``` 7. 关闭连接: ```python # 关闭连接 imap.close() imap.logout() ``` 请注意,上述示例只是对IMAP操作的简单演示,你可以根据自己的需求进行扩展和优化。同时,需要根据你使用的邮箱提供商和服务器进行相应的设置。 希望这些信息对你有帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值