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 նույնականացում։