CPython 3.14 imaplib cez SOCKS s overeným TLS
Prispôsobte IMAP SSL pripojenie CPython 3.14 cez SOCKS bez globálneho nahradenia socketov a bez straty TLS identity poštového servera.
IMAP SSL pripojenie môže prechádzať cez SOCKS a pritom si poštový server zachovať ako svoj TLS partner. Užitočný integračný bod je miesto, kde klient vytvára svoj transport, pred začiatkom obvyklého IMAP pozdravu a spracovania schopností.
Pre CPython 3.14 nasledujúce ukazuje malý adaptér používajúci PySocks. Prepisuje súkromný transportný hook, preto ho držte zviazaný s udržiavanou verziou imaplib:
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()Názvy a port sú zástupné hodnoty pre už dostupný proxy a službu IMAP. Pre verejnú IMAP destináciu, ktorej je povolené používať verejné proxy, zoznam proxy SOCKS5 ponúka kandidátov; každý musí povoliť požadovaný poštový host a port. Závislosť PySocks zabezpečuje vyjednávanie SOCKS; imaplib stále inicializuje poštovú reláciu. Nie je zahrnutá žiadna globálna náhrada socket.socket.
Zachovajte identitu poštového servera
TLS názov hostiteľa zostáva imap.example. Nie je to názov hostiteľa SOCKS. Odovzdanie ssl.create_default_context() zámerne zapína obvyklé kontroly certifikátu a názvu hostiteľa; samotný šifrovaný socket na vytvorenie týchto kontrol nestačí.
proxy_rdns=True žiada, aby cesta SOCKS spracovala cieľový názov hostiteľa. Ak proxy vyžaduje účet, jeho podporované argumenty prihlasovacích údajov patria do tejto transportnej konfigurácie. Neprihlasujú sa do poštovej schránky.
Nechajte inicializáciu relácie na imaplib
Adaptér vracia TLS tok obvyklému konštruktoru. Opätovná implementácia open() zo starého príkladu môže vynechať parametre časového limitu, bufferovanie a ďalšie očakávania inicializácie. V CPython 3.14 je aj starší prístup file vlastnosťou kompatibility, nie poľom na voľnú rekonštrukciu.
Pri aktualizácii knižnice prejdite tento súkromný hook oproti zodpovedajúcemu zdroju. Ak údržba podtriedy nie je vhodná, zvoľte poštového klienta s dokumentovaným transportným rozhraním pre proxy. Každé usporiadanie by malo zachovať rovnaké oddelenie: pripojenie cez proxy, overenie TLS cieľa, potom autentifikácia IMAP.