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.

Artikuj të ngjashëm