Koppel in Indy de proxy aan de IOHandler die TIdSMTP gebruikt. Houd TIdSMTP.Host en Port op de maildienst gericht. De proxycomponent van de IOHandler levert het adres van de tussenpartij en voert de proxyhandshake op dezelfde verbinding uit.

De eigenschap die u gebruikt hangt af van de Indy-versie: Indy 9 biedt SocksInfo; Indy 10 gebruikt TransparentProxy. Controleer de componentbibliotheek in de toepassing in plaats van een voorbeeld alleen op basis van de naam van de Delphi-release te kiezen.

Indy 10 met SOCKS5

Stel dat het formulier deze componenten al heeft:

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

Verbind en configureer ze voordat u de SMTP-verbinding opent:

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;

De portwaarden zijn voorbeelden. De SMTP-port moet passen bij de dienst en de TLS-modus die u wilt gebruiken. De SOCKS-port hoort bij de proxy.

Voor een toegestane openbare SMTP-test waarbij een openbare tussenpartij is toegestaan, biedt de SOCKS5-proxylijst kandidaatadressen. Controleer dat de kandidaat de werkelijke mailhost en -port toestaat, en gebruik de tak zonder proxyauthenticatie zonder inloggegevens van een eerdere proxy te bewaren.

TIdSocksInfo begint met svNoSocks, dus alleen een proxyhostnaam instellen activeert het niet. Kies de juiste SOCKS-versie. Als de proxy SOCKS5-gebruikersnaam/wachtwoord-authenticatie vereist, configureer dan zowel de authenticatiemethode als de inloggegevens:

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

ProxyUser en ProxyPassword vertegenwoordigen waarden die de toepassing levert. Deze eigenschappen authenticeren bij de proxy. Configureer het SMTP-account en de authenticatiemethode apart in de mailclient.

Een bestaande TLS-IOHandler behouden

Een mailclient die STARTTLS of impliciete TLS gebruikt, heeft zijn SSL-capabele IOHandler nodig. Vervang die component niet door een gewone TIdIOHandlerStack alleen om de proxy toe te voegen.

In Indy 10 stamt de SSL-IOHandler-basis af van TIdIOHandlerStack en erft de proxyondersteuning daarvan. Voor een bestaande compatibele SSL-IOHandler met de naam MailTLS wordt de verbinding:

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

De instelling UseTLS van de SMTP-component kiest nog steeds de TLS-modus van de maildienst. Configureer certificaatvertrouwen en hostnaamvalidatie in de TLS-integratie voor smtp.example.net, niet voor de proxyhostnaam. Een tunnel toevoegen legt op zichzelf geen certificaatvalidatie vast.

In plaats daarvan een HTTP CONNECT-proxy gebruiken

Gebruik voor Indy 10 een TIdConnectThroughHttpProxy-component, beschikbaar uit IdConnectThroughHttpProxy. Aangenomen dat er een bestaand, eigendom van het formulier zijnde exemplaar is met de naam HttpTunnel:

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

Als SMTP MailTLS gebruikt, wijs HttpTunnel dan toe aan de TransparentProxy van die handler. Het maildoel blijft op Smtp.

Deze component brengt een HTTP CONNECT-tunnel tot stand en implementeert basisproxyauthenticatie via de eigenschappen Username en Password. Een proxy die een ander authenticatiemechanisme vereist, heeft een compatibele implementatie nodig; ga er niet van uit dat deze twee eigenschappen alle HTTP-authenticatieschema's bieden.

De proxy moet ook CONNECT naar de werkelijke poort van de mailserver toestaan. Toestemming om naar webservers op 443 te tunnelen betekent niet dat u een inzenddienst op 587 of een SMTP-server op 25 mag bereiken.

De Indy 9-verbinding

Indy 9 gebruikt een TIdIOHandlerSocket en de bijbehorende eigenschap SocksInfo. Met formulier-eigen componenten met de namen Socket9 en Socks9 is de equivalente bedrading:

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

De SOCKS-implementatie ervan ondersteunt versies 4, 4a en 5. De Indy 10-indeling met TransparentProxy en HTTP CONNECT-component kan niet zomaar in deze oudere interface worden geplakt.

Er is geen afzonderlijke voorafgaande proxylogin die met een andere TCP-client moet worden uitgevoerd. Proxyauthenticatie, tunnelopzet en SMTP-uitwisseling moeten bij de verbinding horen die de SMTP-component feitelijk gebruikt. Als die bedrading klopt, kan een storing worden gelokaliseerd bij de proxyonderhandeling, de SMTP-groet, TLS of mailauthenticatie, in plaats van elke weigering als een verkeerd mailwachtwoord te behandelen.

Gerelateerde artikelen