V Indyu pripojte proxy k IOHandleru, ktorý používa TIdSMTP. Nechajte TIdSMTP.Host a Port smerovať na poštovú službu. Proxy komponent IOHandleru dodáva adresu sprostredkovateľa a vykonáva proxy handshake na tom istom spojení.

Vlastnosť, ktorú použijete, závisí od verzie Indyu: Indy 9 vystavuje SocksInfo; Indy 10 používa TransparentProxy. Skontrolujte knižnicu komponentov v aplikácii, namiesto aby ste príklad vyberali len podľa názvu vydania Delphi.

Indy 10 so SOCKS5

Predpokladajme, že formulár už tieto komponenty vlastní:

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

Pripojte ich a nakonfigurujte ich pred otvorením SMTP spojenia:

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;

Hodnoty portov sú príklady. Port SMTP musí zodpovedať službe a režimu TLS, ktorý hodláte použiť. Port SOCKS patrí proxy.

Pre povolený verejný SMTP test, kde je verejný sprostredkovateľ dovolený, ponúka zoznam SOCKS5 proxy kandidátske adresy. Overte, že kandidát povoľuje skutočného poštového hostiteľa a port, a použite vetvu bez proxy autentizácie bez uchovania údajov z predchádzajúcej proxy.

TIdSocksInfo začína na svNoSocks, takže samotné nastavenie názvu proxy hostiteľa ju neaktivuje. Zvoľte vhodnú verziu SOCKS. Ak proxy vyžaduje autentizáciu SOCKS5 menom a heslom, nakonfigurujte metódu autentizácie aj údaje:

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

ProxyUser a ProxyPassword predstavujú hodnoty, ktoré dodáva aplikácia. Tieto vlastnosti sa autentizujú voči proxy. SMTP účet a jeho metódu autentizácie nastavte zvlášť v poštovom klientovi.

Zachovanie existujúceho TLS IOHandleru

Poštový klient používajúci STARTTLS alebo implicitné TLS potrebuje svoj IOHandler schopný SSL. Nenahrádzajte tento komponent obyčajným TIdIOHandlerStack len preto, aby ste pridali proxy.

V Indyu 10 základ SSL IOHandleru pochádza z TIdIOHandlerStack a dedí jeho podporu proxy. Pre existujúci kompatibilný SSL IOHandler nazvaný MailTLS vyzerá spojenie takto:

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

Nastavenie UseTLS komponentu SMTP stále volí režim TLS poštovej služby. Dôveru v certifikát a overenie názvu hostiteľa nastavte v TLS integrácii pre smtp.example.net, nie pre názov proxy hostiteľa. Pridanie tunela samo o sebe neustanovuje overenie certifikátu.

Použitie proxy HTTP CONNECT namiesto toho

Pre Indy 10 použite komponent TIdConnectThroughHttpProxy, dostupný z IdConnectThroughHttpProxy. Za predpokladu, že existuje inštancia vlastnená formulárom nazvaná HttpTunnel:

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

Ak SMTP používa MailTLS, priraďte namiesto toho HttpTunnel vlastnosti TransparentProxy tohto obslužného programu. Poštový cieľ zostáva na Smtp.

Tento komponent vytvára tunel HTTP CONNECT a implementuje základnú proxy autentizáciu prostredníctvom svojich vlastností Username a Password. Proxy vyžadujúca iný mechanizmus autentizácie potrebuje kompatibilnú implementáciu; nepredpokladajte, že tieto dve vlastnosti poskytujú všetky schémy HTTP autentizácie.

Proxy musí tiež povoliť CONNECT na skutočný port poštového servera. Povolenie tunelovať k webovým serverom na 443 neznamená povolenie dosiahnuť službu na odosielanie na 587 alebo SMTP server na 25.

Spojenie v Indyu 9

Indy 9 používa TIdIOHandlerSocket a jeho vlastnosť SocksInfo. S komponentmi vlastnenými formulárom nazvanými Socket9 a Socks9 je ekvivalentné zapojenie:

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

Jeho implementácia SOCKS podporuje verzie 4, 4a a 5. Usporiadanie TransparentProxy a komponentu HTTP CONNECT z Indyu 10 nemožno do tohto staršieho rozhrania len tak vložiť.

Neexistuje žiadne samostatné predbežné prihlásenie k proxy, ktoré by sa vykonávalo iným TCP klientom. Proxy autentizácia, zostavenie tunela a SMTP výmena musia patriť spojeniu, ktoré komponent SMTP skutočne používa. Keď je toto zapojenie správne, zlyhanie možno lokalizovať v proxy vyjednávaní, SMTP pozdrave, TLS alebo poštovej autentizácii, namiesto toho, aby sa každé odmietnutie považovalo za nesprávne poštové heslo.

Súvisiace články