CPython 3.14 imaplib, SOCKS üzerinden doğrulanmış TLS ile
CPython 3.14 IMAP SSL bağlantısını soketleri genel olarak değiştirmeden veya posta sunucusunun TLS kimliğini kaybetmeden SOCKS üzerinden uyarlayın.
Bir IMAP SSL bağlantısı, posta sunucusunu TLS eşi olarak koruyarak SOCKS üzerinden geçebilir. Yararlı entegrasyon noktası, istemcinin taşımasını oluşturduğu yer, yani olağan IMAP karşılaması ve yetenek işleme başlamadan önceki noktadır.
CPython 3.14 için aşağıdakiler, PySocks kullanan küçük bir bağdaştırıcıyı gösterir. Özel bir taşıma kancasını geçersiz kılar, bu yüzden onu bakımı yapılan imaplib sürümüne bağlı tutun:
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()Adlar ve bağlantı noktası, hâlihazırda mevcut bir proxy ve IMAP hizmeti için yer tutuculardır. Genel proxy'leri kullanmasına izin verilen genel bir IMAP hedefi için SOCKS5 proxy listesi adaylar sunar; her biri gerekli posta ana bilgisayarına ve bağlantı noktasına izin vermelidir. PySocks bağımlılığı SOCKS görüşmesini sağlar; imaplib yine de posta oturumunu başlatır. socket.socket için genel bir değiştirme söz konusu değildir.
Posta sunucusunun kimliğini koruyun
TLS ana bilgisayar adı imap.example olarak kalır. Bu, SOCKS ana bilgisayar adı değildir. ssl.create_default_context() öğesini geçirmek, olağan sertifika ve ana bilgisayar adı denetimlerini bilinçli olarak etkinleştirir; yalnızca şifrelenmiş bir soket bu denetimleri kurmaya yetmez.
proxy_rdns=True, SOCKS yolunun hedef ana bilgisayar adını işlemesini ister. Proxy bir hesap gerektiriyorsa, desteklenen kimlik bilgisi bağımsız değişkenleri o taşıma yapılandırmasına aittir. Posta kutusuna giriş yapmazlar.
Oturum başlatmayı imaplib'e bırakın
Bağdaştırıcı TLS akışını olağan oluşturucuya geri verir. open() öğesini eski bir örnekten yeniden uygulamak, zaman aşımı parametrelerini, arabelleğe almayı ve diğer başlatma beklentilerini kaçırabilir. CPython 3.14'te eski file erişimi bile serbestçe yeniden kurulabilen bir alan değil, bir uyumluluk özelliğidir.
Kitaplığı yükseltirken bu özel kancayı ilgili kaynağa göre gözden geçirin. Bir alt sınıfı sürdürmek uygun değilse, belgelenmiş proxy taşıma arabirimine sahip bir posta istemcisi seçin. Her düzen aynı ayrımı korumalıdır: proxy bağlantısı, hedefin TLS doğrulaması, ardından IMAP kimlik doğrulaması.