IMAP SSL savienojums var ceļot caur SOCKS, saglabājot pasta serveri kā savu TLS partneri. Noderīgais integrācijas punkts ir vieta, kur klients izveido savu transportu, pirms sākas parastā IMAP sveicināšana un iespēju apstrāde.

CPython 3.14 gadījumā tālāk redzamais ilustrē nelielu adapteri, kas izmanto PySocks. Tas pārraksta privātu transporta āķi, tāpēc turiet to piesaistītu uzturētajai imaplib versijai:

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()

Nosaukumi un ports ir vietturi jau pieejamam starpniekserverim un IMAP servisam. Publiskam IMAP galamērķim, kuram atļauts izmantot publiskus starpniekserverus, SOCKS5 starpniekserveru saraksts piedāvā kandidātus; katram ir jāatļauj nepieciešamais pasta resursdators un ports. PySocks atkarība nodrošina SOCKS sarunas; imaplib joprojām inicializē pasta sesiju. Šeit nav iesaistīta nekāda globāla socket.socket aizstāšana.

Saglabājiet pasta servera identitāti

TLS resursdatora nosaukums paliek imap.example. Tas nav SOCKS resursdatora nosaukums. Nododot ssl.create_default_context(), tiek apzināti iespējotas parastās sertifikāta un resursdatora nosaukuma pārbaudes; tikai šifrēta ligzda nav pietiekama, lai šīs pārbaudes noteiktu.

proxy_rdns=True lūdz, lai SOCKS ceļš apstrādā galamērķa resursdatora nosaukumu. Ja starpniekserverim nepieciešams konts, tā atbalstītie akreditācijas argumenti pieder šai transporta konfigurācijai. Tie nepiesakās pastkastē.

Atstājiet sesijas inicializāciju imaplib

Adapters atgriež TLS plūsmu parastajam konstruktoram. open() atkārtota ieviešana no veca piemēra var izlaist taimauta parametrus, buferēšanu un citas inicializācijas cerības. CPython 3.14 gadījumā pat vecā file piekļuve ir savietojamības īpašība, nevis brīvi rekonstruējams lauks.

Bibliotēkas atjaunināšanas laikā pārskatiet šo privāto āķi pret atbilstošo avotu. Ja apakšklases uzturēšana nav piemērota, izvēlieties pasta klientu ar dokumentētu starpniekservera transporta saskarni. Jebkuram izkārtojumam jāsaglabā tā pati atdalīšana: starpniekservera savienojums, galamērķa TLS pārbaude, pēc tam IMAP autentifikācija.

Saistītie raksti