Eng IMAP SSL-Verbindung kann duerch SOCKS goen an de Mailserver trotzdem als hiren TLS-Peer behalen. Den nëtzlechen Integratiounspunkt ass do, wou de Client säin Transport erstallt, ier déi gewéinlech IMAP-Begréissung an d'Capability-Behandlung ufänken.

Fir CPython 3.14 weist dat Folgend eng kleng Adaptermat PySocks. Si iwwerschreift e private Transport-Hook, also halt si un d'imaplib-Versioun gebonnen, déi ënnerhal gëtt:

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

D'Nimm an de Port sinn Platzhalter fir e schonn disponibele Proxy an en IMAP-Service. Fir en ëffentlecht IMAP-Zil, deem ëffentlech Proxye erlaabt sinn, bitt d'SOCKS5-Proxy-Lëscht Kandidaten; jidderee muss de benötigten Mailhost an de Port erlaben. D'PySocks-Ofhängegkeet liwwert d'SOCKS-Verhandlung; imaplib initialiséiert nach ëmmer d'Mail-Sessioun. Et ass keen globale Remplaçement vun socket.socket bedeelegt.

Behaalt d'Identitéit vum Mailserver

Den TLS-Hostnumm bleift imap.example. Et ass net den SOCKS-Hostnumm. Beim Duerchginn vun ssl.create_default_context() ginn déi normal Zertifikats- an Hostnummskontrollen bewosst aktivéiert; en eenzeg verschlësselte Socket ass net genuch, fir déi Kontrollen opzestellen.

proxy_rdns=True freet de SOCKS-Wee, den Zilhostnumm ze verschaffen. Wann de Proxy e Kont erfuerdert, gehéieren seng ënnerstëtzt Umeldungsargumenter zu där Transportkonfiguratioun. Si loggen sech net an d'Mailbox an.

Loosst d'Sessiounsinitialiséierung beim imaplib

Den Adapter gëtt den TLS-Stroum un den normale Konstruktor zréck. D'Neiimplémentéiere vun open() aus engem ale Beispill kann Timeout-Parameter, Pufferung an aner Initialiséierungsviraussetzunge verpassen. An CPython 3.14 ass souguer den ale file-Zougrëff eng Kompatibilitéitseigenschaft an net e Feld, dat fräi ka rekonstruéiert ginn.

Beim Upgrade vun der Bibliothéik iwwerpréift dësen private Hook géint déi entspriechend Quell. Wann d'Entretien vun enger Ënnerklass net passend ass, wielt e Mailclient mat enger dokumentéierter Proxy-Transport-Schnittstell. All Arrangement soll déi selwecht Trennung behalen: Proxyverbindung, TLS-Verifikatioun vum Zil, duerno IMAP-Authentifikatioun.

Ähnlech Artikelen