Hängen Sie in Indy den Proxy an den IOHandler, den TIdSMTP verwendet. Lassen Sie TIdSMTP.Host und Port auf den Maildienst zeigen. Die Proxy-Komponente des IOHandlers liefert die Adresse des Vermittlers und führt den Proxy-Handshake auf derselben Verbindung aus.

Welche Eigenschaft Sie nutzen, hängt von der Indy-Version ab: Indy 9 bietet SocksInfo; Indy 10 verwendet TransparentProxy. Prüfen Sie die Komponentenbibliothek in der Anwendung, statt ein Beispiel allein nach dem Namen des Delphi-Release auszuwählen.

Indy 10 mit SOCKS5

Angenommen, das Formular besitzt diese Komponenten bereits:

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

Verbinden und konfigurieren Sie sie, bevor Sie die SMTP-Verbindung öffnen:

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;

Die Portwerte sind Beispiele. Der SMTP-Port muss zum Dienst und zum TLS-Modus passen, den Sie verwenden wollen. Der SOCKS-Port gehört zum Proxy.

Für einen zulässigen öffentlichen SMTP-Test, bei dem ein öffentlicher Vermittler erlaubt ist, bietet die SOCKS5-Proxy-Liste Kandidatenadressen. Bestätigen Sie, dass der Kandidat den tatsächlichen Mail-Host und Port zulässt, und nutzen Sie den Zweig ohne Proxy-Authentifizierung, ohne Zugangsdaten eines früheren Proxys zu behalten.

TIdSocksInfo startet mit svNoSocks, daher aktiviert das bloße Setzen eines Proxy-Hostnamens ihn nicht. Wählen Sie die passende SOCKS-Version. Verlangt der Proxy SOCKS5-Authentifizierung per Benutzername/Passwort, konfigurieren Sie sowohl die Authentifizierungsmethode als auch die Zugangsdaten:

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

ProxyUser und ProxyPassword stehen für Werte, die die Anwendung bereitstellt. Diese Eigenschaften authentifizieren gegenüber dem Proxy. Konfigurieren Sie das SMTP-Konto und seine Authentifizierungsmethode getrennt im Mailclient.

Einen vorhandenen TLS-IOHandler beibehalten

Ein Mailclient mit STARTTLS oder implizitem TLS braucht seinen SSL-fähigen IOHandler. Ersetzen Sie diese Komponente nicht durch einen einfachen TIdIOHandlerStack, nur um den Proxy hinzuzufügen.

In Indy 10 leitet sich die SSL-IOHandler-Basis von TIdIOHandlerStack ab und erbt deren Proxy-Unterstützung. Für einen vorhandenen kompatiblen SSL-IOHandler namens MailTLS wird die Verbindung zu:

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

Die UseTLS-Einstellung der SMTP-Komponente wählt weiterhin den TLS-Modus des Maildienstes. Konfigurieren Sie Zertifikatsvertrauen und Hostnamenprüfung in der TLS-Integration für smtp.example.net, nicht für den Proxy-Hostnamen. Einen Tunnel einzurichten bedeutet nicht, dass damit eine Zertifikatsprüfung erfolgt.

Stattdessen einen HTTP-CONNECT-Proxy verwenden

Verwenden Sie für Indy 10 eine TIdConnectThroughHttpProxy-Komponente, verfügbar aus IdConnectThroughHttpProxy. Angenommen, es gibt eine vorhandene, formular-eigene Instanz namens HttpTunnel:

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

Nutzt SMTP MailTLS, weisen Sie HttpTunnel stattdessen der TransparentProxy dieses Handlers zu. Das Mailziel bleibt auf Smtp.

Diese Komponente baut einen HTTP-CONNECT-Tunnel auf und implementiert Basic-Proxy-Authentifizierung über ihre Eigenschaften Username und Password. Ein Proxy, der ein anderes Authentifizierungsverfahren verlangt, braucht eine kompatible Implementierung; nehmen Sie nicht an, dass diese beiden Eigenschaften alle HTTP-Authentifizierungsschemata abdecken.

Der Proxy muss außerdem CONNECT zum tatsächlichen Port des Mailservers erlauben. Die Erlaubnis, zu Webservern auf 443 zu tunneln, bedeutet nicht die Erlaubnis, einen Submission-Dienst auf 587 oder einen SMTP-Server auf 25 zu erreichen.

Die Indy-9-Verbindung

Indy 9 verwendet einen TIdIOHandlerSocket und dessen SocksInfo-Eigenschaft. Mit formular-eigenen Komponenten namens Socket9 und Socks9 lautet die entsprechende Verdrahtung:

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

Dessen SOCKS-Implementierung unterstützt die Versionen 4, 4a und 5. Die Indy-10-Anordnung aus TransparentProxy und HTTP-CONNECT-Komponente lässt sich nicht einfach in diese ältere Schnittstelle einfügen.

Es gibt keine separate vorbereitende Proxy-Anmeldung, die mit einem anderen TCP-Client auszuführen wäre. Proxy-Authentifizierung, Tunnelaufbau und SMTP-Austausch müssen zu der Verbindung gehören, die die SMTP-Komponente tatsächlich verwendet. Stimmt diese Verdrahtung, lässt sich ein Fehler bei der Proxy-Aushandlung, der SMTP-Begrüßung, TLS oder der Mail-Authentifizierung verorten, statt jede Ablehnung als falsches Mailpasswort zu behandeln.

Ähnliche Artikel