CPython 3.14 imaplib përmes SOCKS me TLS të verifikuar
Përshtatni një lidhje IMAP SSL të CPython 3.14 përmes SOCKS pa zëvendësuar socket-et globalisht dhe pa humbur identitetin TLS të serverit të postës.
Një lidhje IMAP SSL mund të udhëtojë përmes SOCKS duke e mbajtur serverin e postës si palën e vet TLS. Pika e dobishme e integrimit është aty ku klienti krijon transportin e vet, përpara se të fillojnë përshëndetja normale IMAP dhe trajtimi i aftësive.
Për CPython 3.14, në vijim ilustrohet një përshtatës i vogël që përdor PySocks. Ai anashkalon një grep privat transporti, prandaj mbajeni të lidhur me versionin e imaplib që mirëmbahet:
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()Emrat dhe porta janë vendmbajtëse për një proxy dhe shërbim IMAP tashmë të disponueshëm. Për një destinacion publik IMAP që lejohet të përdorë proxy publike, lista e proxy-ve SOCKS5 ofron kandidatë; secili duhet të lejojë hostin dhe portën e kërkuar të postës. Varësia PySocks siguron negociatën SOCKS; imaplib ende inicializon sesionin e postës. Nuk përfshihet asnjë zëvendësim global i socket.socket.
Ruani identitetin e serverit të postës
Emri i hostit TLS mbetet imap.example. Nuk është emri i hostit SOCKS. Kalimi i ssl.create_default_context() aktivizon qëllimisht kontrollet normale të certifikatës dhe të emrit të hostit; një socket i kriptuar vetëm nuk mjafton për të vendosur ato kontrolle.
proxy_rdns=True kërkon që rruga SOCKS të trajtojë emrin e hostit të destinacionit. Nëse proxy kërkon një llogari, argumentet e kredencialeve të mbështetura i përkasin asaj konfigurimi transporti. Ato nuk hyjnë në kutinë postare.
Lëreni inicializimin e sesionit te imaplib
Përshtatësi e kthen rrjedhën TLS te konstruktori normal. Rizbatimi i open() nga një shembull i vjetër mund të humbasë parametrat e afatit, buferizimin dhe pritjet e tjera të inicializimit. Në CPython 3.14, edhe aksesi i vjetër file është një veti përputhshmërie, jo një fushë që rindërtohet lirisht.
Kur përmirësoni bibliotekën, rishikoni këtë grep privat kundrejt burimit përkatës. Nëse mirëmbajtja e një nënklase nuk është e përshtatshme, zgjidhni një klient poste me një ndërfaqe transporti proxy të dokumentuar. Çdo rregullim duhet të ruajë të njëjtën ndarje: lidhja proxy, verifikimi TLS i destinacionit, pastaj vërtetimi IMAP.