IMAP SSL veza može putovati kroz SOCKS dok poslužitelj pošte ostaje njezin TLS partner. Korisna točka integracije je mjesto gdje klijent stvara svoj prijenos, 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 prijenosnu 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 zamjenske su vrijednosti za već dostupan proxy i IMAP uslugu. Za javno IMAP odredište kojem je dopušteno koristiti javne proxije, popis SOCKS5 proxija nudi kandidate; svaki mora dopuštati traženi poslužitelj pošte i port. Ovisnost PySocks pruža SOCKS pregovaranje; imaplib i dalje inicijalizira sesiju pošte. Nije uključena nikakva globalna zamjena socket.socket.

Sačuvajte identitet poslužitelja pošte

TLS ime poslužitelja ostaje imap.example. Ono nije SOCKS ime poslužitelja. Prosljeđivanje ssl.create_default_context() namjerno omogućuje uobičajene provjere certifikata i imena poslužitelja; samo šifrirani socket nije dovoljan za uspostavljanje tih provjera.

proxy_rdns=True traži da SOCKS put obradi ime odredišnog poslužitelja. Ako proxy zahtijeva račun, njegovi podržani argumenti vjerodajnica pripadaju toj prijenosnoj konfiguraciji. Oni se ne prijavljuju u poštanski sandučić.

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, međuspremanje i druga očekivanja inicijalizacije. U CPython 3.14 čak je i naslijeđeni pristup file svojstvo kompatibilnosti, a ne polje koje se slobodno rekonstruira.

Pri nadogradnji biblioteke pregledajte ovu privatnu kuku prema odgovarajućem izvoru. Ako održavanje potklase nije prikladno, odaberite poštanskog klijenta s dokumentiranim sučeljem proxy prijenosa. Svaki raspored treba zadržati istu podjelu: proxy veza, TLS provjera odredišta, zatim IMAP autentifikacija.

Povezani članci