IMAP SSL veza može putovati kroz SOCKS dok mail server ostaje njen TLS partner. Korisna tačka integracije je mjesto gdje klijent stvara svoj transport, prije uobičajenog IMAP pozdrava i obrade sposobnosti.

Za CPython 3.14 sljedeće prikazuje mali adapter koji koristi PySocks. On premošćuje privatnu transportnu kuku, pa ga držite vezanim za verziju imaplib-a koja se održava:

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

Imena i port su zamjenske vrijednosti za već dostupan proxy i IMAP servis. Za javno IMAP odredište kojem je dopušteno korištenje javnih proxyja, lista SOCKS5 proxyja nudi kandidate; svaki mora dopuštati traženi mail host i port. Zavisnost PySocks pruža SOCKS pregovaranje; imaplib i dalje inicijalizira mail sesiju. Nije uključena nikakva globalna zamjena socket.socket.

Sačuvajte identitet mail servera

TLS ime hosta ostaje imap.example. Ono nije SOCKS ime hosta. Prosljeđivanje ssl.create_default_context() namjerno omogućava uobičajene provjere certifikata i imena hosta; samo šifrirani socket nije dovoljan da uspostavi te provjere.

proxy_rdns=True traži da SOCKS put obradi ime hosta odredišta. Ako proxy zahtijeva račun, njegovi podržani argumenti za vjerodajnice pripadaju toj transportnoj konfiguraciji. Oni se ne prijavljuju na mailbox.

Ostavite inicijalizaciju sesije imaplib-u

Adapter vraća TLS tok uobičajenom konstruktoru. Ponovno implementiranje open() iz starog primjera može propustiti parametre tajm-auta, baferovanje i druga očekivanja inicijalizacije. U CPython 3.14 čak je i naslijeđeni pristup file svojstvo kompatibilnosti, a ne polje koje se slobodno rekonstruiše.

Pri nadogradnji biblioteke pregledajte ovu privatnu kuku prema odgovarajućem izvoru. Ako održavanje potklase nije prikladno, odaberite mail klijent s dokumentiranim transportnim interfejsom za proxy. Svaki raspored treba zadržati istu podjelu: proxy veza, TLS provjera odredišta, zatim IMAP autentifikacija.

Povezani članci