I Indy kopplar du proxyn till den IOHandler som TIdSMTP använder. Håll TIdSMTP.Host och Port riktade mot e-posttjänsten. IOHandlerns proxykomponent tillhandahåller mellanhandens adress och utför proxy-handskakningen på samma anslutning.

Egenskapen du använder beror på Indy-versionen: Indy 9 exponerar SocksInfo; Indy 10 använder TransparentProxy. Kontrollera komponentbiblioteket i programmet i stället för att välja ett exempel enbart utifrån namnet på Delphi-utgåvan.

Indy 10 med SOCKS5

Anta att formuläret redan äger dessa komponenter:

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

Anslut och konfigurera dem innan du öppnar SMTP-anslutningen:

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;

Portvärdena är exempel. SMTP-porten måste matcha den tjänst och det TLS-läge du tänker använda. SOCKS-porten tillhör proxyn.

För ett tillåtet offentligt SMTP-test där en offentlig mellanhand är tillåten erbjuder SOCKS5-proxylistan kandidatadresser. Bekräfta att kandidaten tillåter den faktiska e-postvärden och porten, och använd grenen utan proxyautentisering utan att behålla uppgifter från en tidigare proxy.

TIdSocksInfo börjar med svNoSocks, så att bara ange ett proxy-värdnamn aktiverar den inte. Välj rätt SOCKS-version. Om proxyn kräver SOCKS5-autentisering med användarnamn/lösenord konfigurerar du både autentiseringsmetoden och uppgifterna:

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

ProxyUser och ProxyPassword representerar värden som programmet tillhandahåller. Dessa egenskaper autentiserar mot proxyn. Konfigurera SMTP-kontot och dess autentiseringsmetod separat i e-postklienten.

Behålla en befintlig TLS-IOHandler

En e-postklient som använder STARTTLS eller implicit TLS behöver sin SSL-kapabla IOHandler. Ersätt inte den komponenten med en vanlig TIdIOHandlerStack bara för att lägga till proxyn.

I Indy 10 härstammar SSL-IOHandlerns bas från TIdIOHandlerStack och ärver dess proxy-stöd. För en befintlig kompatibel SSL-IOHandler som heter MailTLS blir anslutningen:

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

Inställningen UseTLS på SMTP-komponenten väljer fortfarande e-posttjänstens TLS-läge. Konfigurera certifikatförtroende och värdnamnsvalidering i TLS-integrationen för smtp.example.net, inte för proxyns värdnamn. Att lägga till en tunnel etablerar inte certifikatvalidering i sig.

Använda en HTTP CONNECT-proxy i stället

För Indy 10 använder du en TIdConnectThroughHttpProxy-komponent, tillgänglig från IdConnectThroughHttpProxy. Förutsatt att det finns en befintlig formulärägd instans som heter HttpTunnel:

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

Om SMTP använder MailTLS tilldelar du HttpTunnel till den hanterarens TransparentProxy i stället. E-postmålet stannar på Smtp.

Den här komponenten upprättar en HTTP CONNECT-tunnel och implementerar Basic-proxyautentisering via sina egenskaper Username och Password. En proxy som kräver en annan autentiseringsmekanism behöver en kompatibel implementation; anta inte att dessa två egenskaper tillhandahåller alla HTTP-autentiseringsscheman.

Proxyn måste också tillåta CONNECT till e-postserverns faktiska port. Tillstånd att tunnla till webbservrar på 443 innebär inte tillstånd att nå en insändningstjänst på 587 eller en SMTP-server på 25.

Indy 9-anslutningen

Indy 9 använder en TIdIOHandlerSocket och dess egenskap SocksInfo. Med formulärägda komponenter som heter Socket9 och Socks9 är motsvarande koppling:

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

Dess SOCKS-implementering stöder version 4, 4a och 5. Indy 10:s TransparentProxy och HTTP CONNECT-komponentsarrangemang kan inte bara klistras in i detta äldre gränssnitt.

Det finns ingen separat inledande proxyloggning att utföra med en annan TCP-klient. Proxyautentisering, tunneluppsättning och SMTP-utbyte måste tillhöra den anslutning som SMTP-komponenten faktiskt använder. När den kopplingen är korrekt kan ett fel lokaliseras vid proxyförhandlingen, SMTP-hälsningen, TLS eller e-postautentiseringen i stället för att behandla varje avvisande som ett felaktigt e-postlösenord.

Relaterade artiklar