'n IMAP SSL-verbinding kan deur SOCKS beweeg terwyl die posbediener as sy TLS-eweknie behoue bly. Die nuttige integrasiepunt is waar die kliënt sy vervoer skep, voor die gewone IMAP-groet en vermoëhantering begin.

Vir CPython 3.14 illustreer die volgende 'n klein adapter wat PySocks gebruik. Dit oorheers 'n private vervoerhaak, so hou dit gekoppel aan die imaplib-weergawe wat onderhou word:

import imaplib
import ssl
import socks

class SocksIMAP4SSL(imaplib.IMAP4_SSL):
    def _create_socket(self, timeout):
        stream = socks.create_connection(
            (self.host, self.port),
            timeout=timeout,
            proxy_type=socks.SOCKS5,
            proxy_addr="proxy.example",
            proxy_port=1080,
            proxy_rdns=True,
        )
        try:
            return self.ssl_context.wrap_socket(
                stream, server_hostname=self.host)
        except Exception:
            stream.close()
            raise

context = ssl.create_default_context()
with SocksIMAP4SSL("imap.example", ssl_context=context,
                  timeout=15) as mailbox:
    mailbox.noop()

Die name en poort is plekhouers vir 'n reeds beskikbare volmag en IMAP-diens. Vir 'n publieke IMAP-bestemming wat toegelaat word om publieke volmagte te gebruik, bied die SOCKS5-volmaglys kandidate; elkeen moet die vereiste posgasheer en poort toelaat. Die PySocks-afhanklikheid verskaf SOCKS-onderhandeling; imaplib initialiseer steeds die possessie. Geen globale socket.socket-vervanging is betrokke nie.

Bewaar die posbediener se identiteit

Die TLS-gasheernaam bly imap.example. Dit is nie die SOCKS-gasheernaam nie. Om ssl.create_default_context() deur te gee, aktiveer doelbewus normale sertifikaat- en heernaamkontroles; 'n geënkripteerde socket alleen is nie genoeg om daardie kontroles te vestig nie.

proxy_rdns=True vra dat die SOCKS-pad die bestemmingsgasheernaam hanteer. As die volmag 'n rekening vereis, behoort sy ondersteunde geloofsbriewe-argumente aan daardie vervoerkonfigurasie. Hulle meld nie by die posbus aan nie.

Laat sessie-inisialisering by imaplib

Die adapter gee die TLS-stroom aan die normale bouer terug. Om open() uit 'n ou voorbeeld te herimplementeer, kan tydverstreke-parameters, buffers en ander initialiseringsverwagtinge mis. In CPython 3.14 is selfs die ou file-toegang 'n versoenbaarheidseienskap eerder as 'n veld om vryelik te herbou.

By 'n biblioteekopgradering, hersien hierdie private haak teen die ooreenstemmende bron. As die instandhouding van 'n subklas onvanpas is, kies 'n poskliënt met 'n gedokumenteerde volmagvervoerkoppelvlak. Enige reëling moet dieselfde skeiding behou: volmagverbinding, bestemming-TLS-verifikasie, dan IMAP-verifikasie.

Verwante artikels