CPython 3.14 imaplib SOCKS арқылы тексерілген TLS-пен
CPython 3.14 IMAP SSL қосылымын сокеттерді жаһандық ауыстырмай және пошта серверінің TLS сәйкестігін жоғалтпай SOCKS арқылы бейімдеңіз.
IMAP SSL қосылымы пошта серверін өзінің TLS серіктесі ретінде сақтай отырып, SOCKS арқылы өте алады. Пайдалы интеграция нүктесі — клиент өз транспортын жасайтын жер, қарапайым 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 аутентификациясы.