CPython 3.14 imaplib преку SOCKS со потврден TLS
Прилагодете CPython 3.14 IMAP SSL врска преку SOCKS без глобална замена на сокетите и без губење на TLS идентитетот на серверот за пошта.
IMAP SSL врската може да патува преку SOCKS додека серверот за пошта останува нејзин TLS партнер. Корисната точка на интеграција е местото каде клиентот го создава својот транспорт, пред да започнат вообичаениот IMAP поздрав и обработката на можности.
За CPython 3.14, следново прикажува мал адаптер што користи PySocks. Тој прескокнува приватна транспортна кука, затоа држете го врзан за верзијата на 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()Имињата и портата се заменски вредности за веќе достапен прокси и IMAP услуга. За јавна IMAP дестинација на која ѝ е дозволено да користи јавни прокси, списокот на SOCKS5 прокси нуди кандидати; секој мора да ги дозволи потребниот домаќин и порта за пошта. Зависноста PySocks обезбедува SOCKS преговарање; imaplib сè уште ја иницијализира сесијата за пошта. Не е вклучена никаква глобална замена на socket.socket.
Зачувајте го идентитетот на серверот за пошта
Името на домаќинот TLS останува imap.example. Тоа не е името на домаќинот SOCKS. Предавањето на ssl.create_default_context() намерно ги овозможува вообичаените проверки на сертификатот и на името на домаќинот; само шифриран сокет не е доволен за воспоставување на тие проверки.
proxy_rdns=True бара патеката SOCKS да го обработи името на домаќинот на дестинацијата. Ако проксито бара сметка, неговите поддржани аргументи за акредитиви припаѓаат на таа транспортна конфигурација. Тие не се најавуваат во поштенското сандаче.
Оставете ја иницијализацијата на сесијата на imaplib
Адаптерот го враќа TLS текот на вообичаениот конструктор. Повторното имплементирање на open() од стар пример може да ги пропушти параметрите за временско ограничување, баферирањето и другите очекувања за иницијализација. Во CPython 3.14 дури и стариот пристап file е својство за компатибилност, а не поле што слободно се реконструира.
При надградба на библиотеката, прегледајте ја оваа приватна кука наспроти соодветниот извор. Ако одржувањето на поткласа не е соодветно, изберете клиент за пошта со документиран интерфејс за прокси транспорт. Секој распоред треба да го зачува истото разделување: прокси врска, TLS проверка на дестинацијата, потоа IMAP автентикација.