CPython 3.14 imaplib prek SOCKS s preverjenim TLS
Prilagodite povezavo IMAP SSL v CPython 3.14 prek SOCKS, ne da bi globalno zamenjali vtiče ali izgubili identiteto TLS poštnega strežnika.
Povezava IMAP SSL lahko potuje prek SOCKS, pri tem pa poštni strežnik ostane njen TLS partner. Uporabna točka integracije je tam, kjer odjemalec ustvari svoj transport, preden se začneta običajni pozdrav IMAP in obdelava zmožnosti.
Za CPython 3.14 naslednje prikazuje majhen adapter, ki uporablja PySocks. Ta preglasi zasebni transportni kavelj, zato ga držite vezanega na vzdrževano različico imaplib:
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 in vrata so nadomestne vrednosti za že razpoložljivi proxy in storitev IMAP. Za javni cilj IMAP, ki mu je dovoljeno uporabljati javne proxyje, seznam proxyjev SOCKS5 ponuja kandidate; vsak mora dovoliti zahtevani poštni gostitelj in vrata. Odvisnost PySocks zagotavlja pogajanje SOCKS; imaplib še vedno inicializira poštno sejo. Vključena ni nobena globalna zamenjava socket.socket.
Ohranite identiteto poštnega strežnika
Ime gostitelja TLS ostane imap.example. To ni ime gostitelja SOCKS. Posredovanje ssl.create_default_context() namerno omogoči običajna preverjanja potrdila in imena gostitelja; samo šifriran vtič ni dovolj za vzpostavitev teh preverjanj.
proxy_rdns=True zahteva, da pot SOCKS obdela ime ciljnega gostitelja. Če proxy zahteva račun, njegovi podprti argumenti poverilnic pripadajo tej transportni konfiguraciji. Ne prijavijo se v poštni predal.
Pustite inicializacijo seje imaplib-u
Adapter vrne tok TLS običajnemu konstruktorju. Ponovna izvedba open() iz starega primera lahko zgreši parametre časovne omejitve, medpomnjenje in druga pričakovanja inicializacije. V CPython 3.14 je tudi stari dostop file lastnost združljivosti, ne polje za prosto rekonstrukcijo.
Ob nadgradnji knjižnice pregledajte ta zasebni kavelj glede na ustrezni vir. Če vzdrževanje podrazreda ni primerno, izberite poštnega odjemalca z dokumentiranim vmesnikom za proxy transport. Vsaka ureditev bi morala ohraniti isto ločevanje: povezava prek proxyja, preverjanje TLS cilja, nato preverjanje pristnosti IMAP.