Geben Sie Indys SMTP-Verbindung einen Proxy-IOHandler
Verbinden Sie SOCKS oder HTTP CONNECT mit TIdSMTP über die IOHandler-Eigenschaften der passenden Indy-Version, mit getrennten Mail- und Proxy-Einstellungen.
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: TIdSMTPMailSocket: TIdIOHandlerStackSocks: 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.