Στο Indy, συνδέστε τον διαμεσολαβητή στον IOHandler που χρησιμοποιεί το TIdSMTP. Κρατήστε τα TIdSMTP.Host και Port στραμμένα προς την υπηρεσία αλληλογραφίας. Το τμήμα διαμεσολαβητή του IOHandler παρέχει τη διεύθυνση του ενδιάμεσου και εκτελεί τη χειραψία διαμεσολαβητή στην ίδια σύνδεση.

Η ιδιότητα που χρησιμοποιείτε εξαρτάται από την έκδοση Indy: το Indy 9 εκθέτει το SocksInfo· το Indy 10 χρησιμοποιεί το TransparentProxy. Ελέγξτε τη βιβλιοθήκη συστατικών στην εφαρμογή αντί να επιλέγετε παράδειγμα μόνο από το όνομα έκδοσης του Delphi.

Indy 10 με SOCKS5

Ας υποθέσουμε ότι η φόρμα διαθέτει ήδη αυτά τα συστατικά:

  • Smtp: TIdSMTP
  • MailSocket: TIdIOHandlerStack
  • Socks: TIdSocksInfo

Συνδέστε τα και διαμορφώστε τα πριν ανοίξετε τη σύνδεση SMTP:

Smtp.Host := 'smtp.example.net';
Smtp.Port := 587;
Smtp.IOHandler := MailSocket;

Socks.Host := 'proxy.example.net';
Socks.Port := 1080;
Socks.Version := svSocks5;
MailSocket.TransparentProxy := Socks;

Οι τιμές θυρών είναι παραδείγματα. Η θύρα SMTP πρέπει να ταιριάζει με την υπηρεσία και τη λειτουργία TLS που σκοπεύετε να χρησιμοποιήσετε. Η θύρα SOCKS ανήκει στον διαμεσολαβητή.

Για μια επιτρεπόμενη δημόσια δοκιμή SMTP όπου επιτρέπεται δημόσιος ενδιάμεσος, η λίστα διαμεσολαβητών SOCKS5 προσφέρει υποψήφιες διευθύνσεις. Επιβεβαιώστε ότι ο υποψήφιος επιτρέπει τον πραγματικό κεντρικό υπολογιστή και θύρα αλληλογραφίας και χρησιμοποιήστε τον κλάδο χωρίς έλεγχο ταυτότητας διαμεσολαβητή, χωρίς να κρατάτε διαπιστευτήρια από προηγούμενο διαμεσολαβητή.

Το TIdSocksInfo ξεκινά με svNoSocks, οπότε η απλή ρύθμιση ονόματος κεντρικού υπολογιστή διαμεσολαβητή δεν το ενεργοποιεί. Επιλέξτε την κατάλληλη έκδοση SOCKS. Αν ο διαμεσολαβητής απαιτεί έλεγχο ταυτότητας SOCKS5 με όνομα χρήστη/κωδικό, διαμορφώστε και τη μέθοδο ελέγχου ταυτότητας και τα διαπιστευτήρια:

Socks.Authentication := saUsernamePassword;
Socks.Username := ProxyUser;
Socks.Password := ProxyPassword;

Τα ProxyUser και ProxyPassword αντιπροσωπεύουν τιμές που παρέχει η εφαρμογή. Αυτές οι ιδιότητες πιστοποιούνται στον διαμεσολαβητή. Διαμορφώστε τον λογαριασμό SMTP και τη μέθοδο ελέγχου ταυτότητας ξεχωριστά στον πελάτη αλληλογραφίας.

Διατήρηση υπάρχοντος IOHandler TLS

Ένας πελάτης αλληλογραφίας που χρησιμοποιεί STARTTLS ή σιωπηρό TLS χρειάζεται τον IOHandler του με δυνατότητα SSL. Μην αντικαταστήσετε αυτό το συστατικό με απλό TIdIOHandlerStack μόνο για να προσθέσετε τον διαμεσολαβητή.

Στο Indy 10 η βάση IOHandler για SSL κατάγεται από το TIdIOHandlerStack και κληρονομεί την υποστήριξη διαμεσολαβητή του. Για υπάρχοντα συμβατό IOHandler SSL με όνομα MailTLS, η σύνδεση γίνεται:

Smtp.IOHandler := MailTLS;
MailTLS.TransparentProxy := Socks;

Η ρύθμιση UseTLS του συστατικού SMTP εξακολουθεί να επιλέγει τη λειτουργία TLS της υπηρεσίας αλληλογραφίας. Διαμορφώστε την εμπιστοσύνη πιστοποιητικού και την επικύρωση ονόματος κεντρικού υπολογιστή στην ενσωμάτωση TLS για το smtp.example.net, όχι για το όνομα του διαμεσολαβητή. Η προσθήκη σήραγγας δεν καθιερώνει από μόνη της επικύρωση πιστοποιητικού.

Χρήση διαμεσολαβητή HTTP CONNECT αντί αυτού

Για το Indy 10, χρησιμοποιήστε συστατικό TIdConnectThroughHttpProxy, διαθέσιμο από το IdConnectThroughHttpProxy. Υποθέτοντας υπάρχον στιγμιότυπο που ανήκει στη φόρμα με όνομα HttpTunnel:

HttpTunnel.Host := 'proxy.example.net';
HttpTunnel.Port := 8080;
HttpTunnel.Enabled := True;
MailSocket.TransparentProxy := HttpTunnel;

Αν το SMTP χρησιμοποιεί το MailTLS, αναθέστε το HttpTunnel στην ιδιότητα TransparentProxy αυτού του χειριστή. Ο στόχος αλληλογραφίας παραμένει στο Smtp.

Αυτό το συστατικό δημιουργεί σήραγγα HTTP CONNECT και υλοποιεί βασικό έλεγχο ταυτότητας διαμεσολαβητή μέσω των ιδιοτήτων του Username και Password. Ένας διαμεσολαβητής που απαιτεί άλλο μηχανισμό ελέγχου ταυτότητας χρειάζεται συμβατή υλοποίηση· μην υποθέτετε ότι αυτές οι δύο ιδιότητες παρέχουν όλα τα σχήματα ελέγχου ταυτότητας HTTP.

Ο διαμεσολαβητής πρέπει επίσης να επιτρέπει CONNECT στην πραγματική θύρα του διακομιστή αλληλογραφίας. Η άδεια σήραγγας προς διακομιστές ιστού στη 443 δεν συνεπάγεται άδεια πρόσβασης σε υπηρεσία υποβολής στη 587 ή σε διακομιστή SMTP στη 25.

Η σύνδεση Indy 9

Το Indy 9 χρησιμοποιεί TIdIOHandlerSocket και την ιδιότητά του SocksInfo. Με συστατικά που ανήκουν στη φόρμα με ονόματα Socket9 και Socks9, η ισοδύναμη καλωδίωση είναι:

Smtp.IOHandler := Socket9;
Socket9.SocksInfo := Socks9;
Socks9.Host := 'proxy.example.net';
Socks9.Port := 1080;
Socks9.Version := svSocks5;

Η υλοποίηση SOCKS του υποστηρίζει εκδόσεις 4, 4a και 5. Η διάταξη TransparentProxy και συστατικού HTTP CONNECT του Indy 10 δεν μπορεί να επικολληθεί απλώς σε αυτή την παλαιότερη διεπαφή.

Δεν υπάρχει ξεχωριστή προκαταρκτική σύνδεση διαμεσολαβητή που να εκτελείται με άλλον πελάτη TCP. Ο έλεγχος ταυτότητας διαμεσολαβητή, η ρύθμιση σήραγγας και η ανταλλαγή SMTP πρέπει να ανήκουν στη σύνδεση που χρησιμοποιεί πραγματικά το συστατικό SMTP. Όταν η καλωδίωση είναι σωστή, μια αποτυχία εντοπίζεται στη διαπραγμάτευση διαμεσολαβητή, στον χαιρετισμό SMTP, στο TLS ή στον έλεγχο ταυτότητας αλληλογραφίας, αντί να θεωρείται κάθε άρνηση λάθος κωδικός αλληλογραφίας.

Σχετικά άρθρα