IMAP SSL ulanishi pochta serverini o'zining TLS sherigi sifatida saqlab, SOCKS orqali o'tishi mumkin. Foydali integratsiya nuqtasi — mijoz o'z transportini yaratadigan joy, oddiy IMAP salomlashuvi va imkoniyatlarni qayta ishlash boshlanishidan oldin.

CPython 3.14 uchun quyidagi PySocks ishlatadigan kichik adapterni ko'rsatadi. U shaxsiy transport ilgagini bekor qiladi, shuning uchun uni qo'llab-quvvatlanayotgan imaplib versiyasiga bog'lab turing:

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()

Nomlar va port allaqachon mavjud proksi va IMAP xizmati uchun o'rinbosarlardir. Ommaviy proksilardan foydalanishga ruxsat berilgan ommaviy IMAP manzili uchun SOCKS5 proksilar ro'yxati nomzodlarni taklif qiladi; har biri kerakli pochta xosti va portiga ruxsat berishi kerak. PySocks qaramligi SOCKS muzokaralarini ta'minlaydi; imaplib baribir pochta sessiyasini ishga tushiradi. Bunda socket.socket ning hech qanday global almashtirilishi ishtirok etmaydi.

Pochta serverining identifikatorini saqlang

TLS xost nomi imap.example bo'lib qoladi. Bu SOCKS xost nomi emas. ssl.create_default_context() ni uzatish oddiy sertifikat va xost nomi tekshiruvlarini ataylab yoqadi; faqat shifrlangan soket bu tekshiruvlarni o'rnatish uchun yetarli emas.

proxy_rdns=True SOCKS yo'lidan manzil xost nomini qayta ishlashni so'raydi. Agar proksi hisob talab qilsa, uning qo'llab-quvvatlanadigan hisob ma'lumotlari argumentlari o'sha transport konfiguratsiyasiga tegishli. Ular pochta qutisiga kirmaydi.

Sessiya ishga tushishini imaplib ga qoldiring

Adapter TLS oqimini oddiy konstruktorga qaytaradi. Eski misoldan open() ni qayta joriy qilish vaqt chegarasi parametrlari, buferlash va boshqa ishga tushirish kutishlarini o'tkazib yuborishi mumkin. CPython 3.14 da hatto eski file kirish ham erkin qayta quriladigan maydon emas, balki moslik xususiyati.

Kutubxonani yangilashda ushbu shaxsiy ilgakni tegishli manbaga qarab qayta ko'rib chiqing. Agar ichki sinfni qo'llab-quvvatlash mos bo'lmasa, hujjatlashtirilgan proksi transport interfeysiga ega pochta mijozini tanlang. Har qanday tartib bir xil ajratishni saqlashi kerak: proksi ulanishi, manzilning TLS tekshiruvi, so'ngra IMAP autentifikatsiyasi.

O'xshash maqolalar