CPython 3.14 imaplib SOCKS ମାଧ୍ୟମରେ ଯାଞ୍ଚିତ TLS ସହିତ
ସକେଟଗୁଡ଼ିକୁ ବିଶ୍ୱସ୍ତରରେ ନ ବଦଳାଇ କିମ୍ବା ମେଲ ସର୍ଭରର TLS ପରିଚୟ ନ ହରାଇ CPython 3.14 ର IMAP SSL ସଂଯୋଗକୁ 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 ପ୍ରମାଣୀକରଣ।