CPython 3.14 imaplib μέσω SOCKS με επαληθευμένο TLS
Προσαρμόστε μια σύνδεση IMAP SSL του CPython 3.14 μέσω SOCKS χωρίς καθολική αντικατάσταση υποδοχών ή απώλεια της ταυτότητας TLS του διακομιστή αλληλογραφίας.
Μια σύνδεση IMAP SSL μπορεί να ταξιδέψει μέσω SOCKS κρατώντας τον διακομιστή αλληλογραφίας ως ομότιμό της στο TLS. Το χρήσιμο σημείο ολοκλήρωσης είναι εκεί όπου ο πελάτης δημιουργεί το μεταφορικό του μέσο, πριν αρχίσουν ο συνήθης χαιρετισμός 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.