Ge Indys SMTP-anslutning en proxy-IOHandler
Anslut SOCKS eller HTTP CONNECT till TIdSMTP med rätt Indy-versions IOHandler-egenskaper, med separata e-post- och proxyinställningar.
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: TIdSMTPMailSocket: TIdIOHandlerStackSocks: 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.