CPython 3.14 imaplib kupitia SOCKS na TLS iliyothibitishwa
Rekebisha muunganisho wa IMAP SSL wa CPython 3.14 kupitia SOCKS bila kubadilisha soketi kwa jumla au kupoteza utambulisho wa TLS wa seva ya barua.
Muunganisho wa IMAP SSL unaweza kusafiri kupitia SOCKS huku seva ya barua ikibaki mshirika wake wa TLS. Sehemu muhimu ya ujumuishaji ni pale mteja anapounda usafirishaji wake, kabla ya salamu ya kawaida ya IMAP na utunzaji wa uwezo kuanza.
Kwa CPython 3.14, yafuatayo yanaonyesha kirekebishaji kidogo kinachotumia PySocks. Kinabatilisha ndoano ya usafirishaji ya kibinafsi, kwa hivyo kiweke kimefungwa na toleo la imaplib linalotunzwa:
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()Majina na bandari ni nafasi za kishikiliaji kwa proksi na huduma ya IMAP iliyopo tayari. Kwa lengo la umma la IMAP linaloruhusiwa kutumia proksi za umma, orodha ya proksi za SOCKS5 hutoa wagombea; kila mmoja lazima aruhusu mwenyeji wa barua na bandari zinazohitajika. Utegemezi wa PySocks hutoa majadiliano ya SOCKS; imaplib bado huanzisha kipindi cha barua. Hakuna ubadilishaji wa jumla wa socket.socket unaohusika.
Hifadhi utambulisho wa seva ya barua
Jina la mwenyeji wa TLS linabaki imap.example. Si jina la mwenyeji wa SOCKS. Kupitisha ssl.create_default_context() huwasha kwa makusudi ukaguzi wa kawaida wa cheti na jina la mwenyeji; soketi iliyosimbwa peke yake haitoshi kuweka ukaguzi huo.
proxy_rdns=True huomba njia ya SOCKS ishughulikie jina la mwenyeji lengwa. Ikiwa proksi inahitaji akaunti, hoja zake za kitambulisho zinazotumika ni za usanidi huo wa usafirishaji. Haziingii kwenye kisanduku cha barua.
Acha uanzishaji wa kipindi kwa imaplib
Kirekebishaji hurudisha mkondo wa TLS kwa kijenzi cha kawaida. Kutekeleza tena open() kutoka mfano wa zamani kunaweza kukosa vigezo vya muda, uhifadhi wa bafa na matarajio mengine ya uanzishaji. Katika CPython 3.14, hata ufikiaji wa zamani wa file ni sifa ya uoanifu, si uwanja wa kujengwa upya kwa uhuru.
Unapoboresha maktaba, pitia ndoano hii ya kibinafsi dhidi ya chanzo kinacholingana. Ikiwa kutunza darasa ndogo hakufai, chagua mteja wa barua aliye na kiolesura cha usafirishaji wa proksi kilichoandikwa. Mpangilio wowote unapaswa kuhifadhi mgawanyiko huo huo: muunganisho wa proksi, uthibitisho wa TLS wa lengo, kisha uthibitishaji wa IMAP.