CPython 3.14 imaplib kroz SOCKS s provjerenim TLS-om
Prilagodite CPython 3.14 IMAP SSL vezu kroz SOCKS bez globalne zamjene socketa i bez gubitka TLS identiteta poslužitelja pošte.
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.