एक 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 प्रमाणीकरण।

संबंधित लेख