In IMAP SSL-ferbining kin fia SOCKS reizgje wylst de posttsjinner as har TLS-partner bewarre bliuwt. It nuttige yntegraasjepunt is dêr't de klant syn ferfier oanmakket, foar't de gewoane IMAP-groetnis en de omgong mei mooglikheden begjinne.

Foar CPython 3.14 lit it folgjende in lytse adapter sjen dy't PySocks brûkt. It oerskriuwt in privee ferfiersheak, hâld it dêrom bûn oan de imaplib-ferzje dy't ûnderholden wurdt:

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

De nammen en de poarte binne plakhâlders foar in al beskikbere proxy en IMAP-tsjinst. Foar in iepenbier IMAP-doel dat tastien is om iepenbiere proxies te brûken, biedt de SOCKS5-proksylist kandidaten; elk moat de fereaske posthost en poarte tastean. De PySocks-ôfhinklikens leveret de SOCKS-ûnderhanneling; imaplib initialisearret noch altyd de postsesje. Der is gjin globale socket.socket-ferfanging by belutsen.

Behâld de identiteit fan de posttsjinner

De TLS-hostnamme bliuwt imap.example. It is net de SOCKS-hostnamme. It trochjaan fan ssl.create_default_context() skeakelet mei opsetsin de gewoane sertifikaat- en hostnamme-kontrôles yn; in fersifere socket allinnich is net genôch om dy kontrôles te festigjen.

proxy_rdns=True freget it SOCKS-paad om de hostnamme fan it doel te behanneljen. As de proxy in akkount easket, hearre syn stipe bewiis-arguminten by dy ferfierskonfiguraasje. Se logge net yn by de postbus.

Lit de sesje-initialisaasje by imaplib

De adapter jout de TLS-stream werom oan de gewoane konstruktor. It opnij ymplemintearjen fan open() út in âld foarbyld kin timeout-parameters, buffering en oare initialisaasjeferwachtings misse. Yn CPython 3.14 is sels de âlde file-tagong in kompatibiliteitseigenskip yn stee fan in fjild om frij opnij te bouwen.

By in biblioteekfernijing, besjoch dizze privee heak tsjin de oerienkommende boarne. As it ûnderhâlden fan in subklasse net geskikt is, kies dan in postklant mei in dokumintearre proxy-ferfiersynterface. Elke regeling soe deselde skieding behâlde moatte: proxy-ferbining, TLS-ferifikaasje fan it doel, dan IMAP-autentikaasje.

Relatearre artikelen