CPython 3.14 imaplib SOCKS vasitəsilə yoxlanılmış TLS ilə
CPython 3.14 IMAP SSL bağlantısını soketləri qlobal şəkildə dəyişmədən və poçt serverinin TLS kimliyini itirmədən SOCKS üzərindən uyğunlaşdırın.
IMAP SSL bağlantısı poçt serverini öz TLS həmkarı kimi saxlayaraq SOCKS üzərindən keçə bilər. Faydalı inteqrasiya nöqtəsi müştərinin öz transportunu yaratdığı yerdir, adi IMAP salamlaşması və imkanların işlənməsi başlamazdan əvvəl.
CPython 3.14 üçün aşağıdakı PySocks istifadə edən kiçik adapteri göstərir. O, şəxsi transport qarmağını əvəz edir, ona görə də onu saxlanılan imaplib versiyasına bağlı tutun:
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()Adlar və port artıq mövcud olan proksi və IMAP xidməti üçün yer tutuculardır. Açıq proksilərdən istifadəsinə icazə verilən açıq IMAP təyinatı üçün SOCKS5 proksi siyahısı namizədlər təqdim edir; hər biri tələb olunan poçt hostuna və porta icazə verməlidir. PySocks asılılığı SOCKS danışıqlarını təmin edir; imaplib yenə də poçt sessiyasını işə salır. Heç bir qlobal socket.socket əvəzlənməsi iştirak etmir.
Poçt serverinin kimliyini qoruyun
TLS host adı imap.example olaraq qalır. Bu SOCKS host adı deyil. ssl.create_default_context() ötürmək adi sertifikat və host adı yoxlamalarını qəsdən aktivləşdirir; tək şifrələnmiş soket bu yoxlamaları qurmaq üçün kifayət etmir.
proxy_rdns=True SOCKS yolundan təyinat host adını idarə etməyi xahiş edir. Proksi hesab tələb edirsə, onun dəstəklədiyi etimadnamə arqumentləri həmin transport konfiqurasiyasına aiddir. Onlar poçt qutusuna daxil olmur.
Sessiyanın işə salınmasını imaplib-ə buraxın
Adapter TLS axınını adi konstruktora qaytarır. Köhnə nümunədən open()-i yenidən tətbiq etmək timeout parametrlərini, buferləməni və digər işəsalma gözləntilərini qaçıra bilər. CPython 3.14-də hətta köhnə file girişi sərbəst şəkildə yenidən qurulacaq sahə deyil, uyğunluq xassəsidir.
Kitabxana yeniləndikdə bu şəxsi qarmağı uyğun mənbə ilə müqayisə edərək nəzərdən keçirin. Alt sinfi saxlamaq uyğun deyilsə, sənədləşdirilmiş proksi transport interfeysi olan poçt müştərisi seçin. Hər hansı quruluş eyni ayrılığı qorumalıdır: proksi bağlantısı, təyinatın TLS yoxlanması, sonra IMAP autentifikasiyası.