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 প্রমাণীকরণ।