CPython 3.14 imaplib permezz ta' SOCKS bi TLS ivverifikat
Adatta konnessjoni IMAP SSL ta' CPython 3.14 permezz ta' SOCKS mingħajr ma tibdel is-sockets globalment jew titlef l-identità TLS tas-server tal-posta.
Konnessjoni IMAP SSL tista' tgħaddi minn SOCKS filwaqt li żżomm is-server tal-posta bħala l-pari TLS tagħha. Il-punt ta' integrazzjoni utli huwa fejn il-klijent joħloq it-trasport tiegħu, qabel ma jibdew is-sellum IMAP tas-soltu u l-immaniġġjar tal-kapaċitajiet.
Għal CPython 3.14, dan li ġej juri adattatur żgħir li juża PySocks. Dan jissostitwixxi hook tat-trasport privat, għalhekk żommu marbut mal-verżjoni imaplib li tinżamm:
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()L-ismijiet u l-port huma placeholders għal proxy u servizz IMAP diġà disponibbli. Għal destinazzjoni IMAP pubblika li titħalla tuża proxies pubbliċi, il-lista ta' proxies SOCKS5 toffri kandidati; kull wieħed irid jippermetti l-host u l-port tal-posta meħtieġa. Id-dipendenza PySocks tipprovdi n-negozjar SOCKS; imaplib xorta jibda s-sessjoni tal-posta. M'hemmx sostituzzjoni globali ta' socket.socket involuta.
Ippreserva l-identità tas-server tal-posta
L-isem tal-host TLS jibqa' imap.example. Mhuwiex l-isem tal-host SOCKS. Li tgħaddi ssl.create_default_context() b'mod intenzjonat tattiva l-kontrolli tas-soltu taċ-ċertifikat u tal-isem tal-host; socket encryptat waħdu mhuwiex biżżejjed biex jistabbilixxi dawk il-kontrolli.
proxy_rdns=True jitlob li t-triq SOCKS timmaniġġja l-isem tal-host tad-destinazzjoni. Jekk il-proxy jeħtieġ kont, l-argumenti tal-kredenzjali appoġġati tiegħu jappartjenu għal dik il-konfigurazzjoni tat-trasport. Dawn ma jidħlux fil-kaxxa tal-posta.
Ħalli l-inizjalizzazzjoni tas-sessjoni lil imaplib
L-adattatur jirritorna l-fluss TLS lill-kostruttur tas-soltu. Li terġa' timplimenta open() minn eżempju antik tista' taqbeż parametri tat-timeout, buffering u aspettattivi oħra tal-inizjalizzazzjoni. F'CPython 3.14, anke l-aċċess file antik huwa proprjetà ta' kompatibilità, mhux qasam li jista' jiġi rikostruwit liberament.
Meta taġġorna l-librerija, erġa' eżamina dan il-hook privat kontra s-sors li jaqbel. Jekk iż-żamma ta' subclass mhijiex xierqa, agħżel klijent tal-posta b'interfaċċja tat-trasport tal-proxy dokumentata. Kwalunkwe arranġament għandu jippreserva l-istess separazzjoni: konnessjoni tal-proxy, verifika TLS tad-destinazzjoni, imbagħad awtentikazzjoni IMAP.