CPython 3.14 imaplib SOCKS ئارقىلىق دەلىللەنگەن TLS بىلەن
CPython 3.14 نىڭ IMAP SSL ئۇلىنىشىنى سوكېتلارنى پۈتۈن سىستېمىدا ئالماشتۇرماي ياكى ئېلخەت مۇلازىمېتىرىنىڭ TLS كىملىكىنى يوقاتماي SOCKS ئارقىلىق ماسلاشتۇرۇڭ.
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 دەلىللەش.