IMAP SSL veza može putovati kroz SOCKS dok poštanski server ostaje njen TLS partner. Korisna tačka integracije je mjesto gdje klijent stvara svoj transport, prije početka uobičajenog IMAP pozdrava i obrade mogućnosti.

Za CPython 3.14 sljedeće prikazuje mali adapter koji koristi PySocks. On presreće privatnu transportnu kuku, pa ga držite vezanim uz 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()

Nazivi i port su zamjenske vrijednosti za već dostupan proxy i IMAP uslugu. Za javno IMAP odredište kojem je dopušteno koristiti javne proxije, lista SOCKS5 proxija nudi kandidate; svaki mora dopuštati traženi poštanski host i port. Zavisnost PySocks pruža SOCKS pregovaranje; imaplib i dalje inicijalizira sesiju pošte. Nije uključena nikakva globalna zamjena socket.socket.

Sačuvajte identitet poštanskog 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 putanja SOCKS obradi ime hosta odredišta. Ako proxy zahtijeva račun, njegovi podržani argumenti vjerodajnica pripadaju toj transportnoj konfiguraciji. Oni se ne prijavljuju na poštansko sanduče.

Prepustite inicijalizaciju sesije imaplib-u

Adapter vraća TLS tok uobičajenom konstruktoru. Ponovna implementacija open() iz starog primjera može propustiti parametre vremenskog ograničenja, 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 poštanski klijent s dokumentiranim sučeljem proxy transporta. Svaki raspored treba zadržati istu podjelu: proxy veza, TLS provjera odredišta, zatim IMAP autentifikacija.

Povezani članci