CPython 3.14 imaplib SOCKS-on át ellenőrzött TLS-sel
Alakítson át egy CPython 3.14-es IMAP SSL kapcsolatot SOCKS-on keresztül anélkül, hogy globálisan lecserélné a socketeket, vagy elveszítené a levelezőszerver TLS-identitását.
Egy IMAP SSL kapcsolat áthaladhat SOCKS-on, miközben a levelezőszerver marad a TLS-partnere. A hasznos integrációs pont ott van, ahol a kliens létrehozza a szállítási rétegét, a szokásos IMAP-üdvözlés és a képességek kezelésének kezdete előtt.
CPython 3.14 esetén az alábbi egy kis, PySocksot használó adaptert mutat be. Felülír egy privát szállítási hookot, ezért tartsa a karbantartott imaplib-verzióhoz kötve:
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()A nevek és a port egy már elérhető proxy és IMAP-szolgáltatás helyőrzői. Egy nyilvános IMAP-célhoz, amelynek engedélyezett a nyilvános proxyk használata, a SOCKS5 proxy lista kínál jelölteket; mindegyiknek engedélyeznie kell a szükséges levélkiszolgálót és portot. A PySocks függőség biztosítja a SOCKS-egyeztetést; az imaplib továbbra is inicializálja a levélmunkamenetet. Nem vesz részt semmilyen globális socket.socket-csere.
Őrizze meg a levelezőszerver identitását
A TLS-gazdanév imap.example marad. Ez nem a SOCKS-gazdanév. A ssl.create_default_context() átadása szándékosan engedélyezi a szokásos tanúsítvány- és gazdanév-ellenőrzéseket; egy titkosított socket önmagában nem elég ezek megteremtéséhez.
A proxy_rdns=True arra kéri a SOCKS-útvonalat, hogy kezelje a cél gazdanevét. Ha a proxy fiókot igényel, a támogatott hitelesítőadat-argumentumai ehhez a szállítási konfigurációhoz tartoznak. Ezek nem jelentkeznek be a postaládába.
Hagyja a munkamenet inicializálását az imaplibra
Az adapter visszaadja a TLS-folyamot a szokásos konstruktornak. A open() újraimplementálása egy régi példából kihagyhatja az időtúllépési paramétereket, a pufferelést és más inicializálási elvárásokat. A CPython 3.14-ben még a régi file-hozzáférés is kompatibilitási tulajdonság, nem szabadon újraépíthető mező.
Könyvtárfrissítéskor vizsgálja felül ezt a privát hookot a megfelelő forráshoz képest. Ha az alosztály karbantartása nem megfelelő, válasszon dokumentált proxy-szállítási felülettel rendelkező levelezőklienst. Bármely elrendezésnek meg kell őriznie ugyanazt a szétválasztást: proxykapcsolat, a cél TLS-ellenőrzése, majd IMAP-hitelesítés.