Dați conexiunii SMTP din Indy un IOHandler de proxy
Conectați SOCKS sau HTTP CONNECT la TIdSMTP folosind proprietățile IOHandler ale versiunii Indy corecte, cu setări separate pentru poștă și proxy.
În Indy, atașați proxy-ul la IOHandler-ul folosit de TIdSMTP. Păstrați TIdSMTP.Host și Port îndreptate spre serviciul de poștă. Componenta proxy a IOHandler-ului furnizează adresa intermediarului și efectuează schimbul de mână proxy pe aceeași conexiune.
Proprietatea folosită depinde de versiunea Indy: Indy 9 expune SocksInfo; Indy 10 folosește TransparentProxy. Verificați biblioteca de componente din aplicație în loc să alegeți un exemplu doar după numele ediției Delphi.
Indy 10 cu SOCKS5
Presupunem că formularul are deja aceste componente:
Smtp: TIdSMTPMailSocket: TIdIOHandlerStackSocks: TIdSocksInfo
Conectați-le și configurați-le înainte de a deschide conexiunea SMTP:
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;
Valorile porturilor sunt exemple. Portul SMTP trebuie să corespundă serviciului și modului TLS pe care intenționați să le folosiți. Portul SOCKS aparține proxy-ului.
Pentru un test SMTP public permis, în care un intermediar public este admis, lista de proxy-uri SOCKS5 oferă adrese candidate. Confirmați că respectivul candidat permite gazda și portul de poștă reale și folosiți ramura fără autentificare proxy, fără a păstra datele de autentificare ale unui proxy anterior.
TIdSocksInfo începe cu svNoSocks, deci doar setarea unui nume de gazdă proxy nu îl activează. Alegeți versiunea SOCKS potrivită. Dacă proxy-ul cere autentificare SOCKS5 cu nume de utilizator/parolă, configurați atât metoda de autentificare, cât și datele de autentificare:
Socks.Authentication := saUsernamePassword;
Socks.Username := ProxyUser;
Socks.Password := ProxyPassword;
ProxyUser și ProxyPassword reprezintă valori furnizate de aplicație. Aceste proprietăți se autentifică la proxy. Configurați contul SMTP și metoda lui de autentificare separat în clientul de poștă.
Păstrarea unui IOHandler TLS existent
Un client de poștă care folosește STARTTLS sau TLS implicit are nevoie de IOHandler-ul său compatibil SSL. Nu înlocuiți acea componentă cu un TIdIOHandlerStack simplu doar pentru a adăuga proxy-ul.
În Indy 10, baza IOHandler-ului SSL provine din TIdIOHandlerStack și moștenește suportul său pentru proxy. Pentru un IOHandler SSL compatibil existent numit MailTLS, conexiunea devine:
Smtp.IOHandler := MailTLS;
MailTLS.TransparentProxy := Socks;
Setarea UseTLS a componentei SMTP alege în continuare modul TLS al serviciului de poștă. Configurați încrederea în certificat și validarea numelui de gazdă în integrarea TLS pentru smtp.example.net, nu pentru numele de gazdă al proxy-ului. Adăugarea unui tunel nu stabilește de la sine validarea certificatului.
Folosirea unui proxy HTTP CONNECT în schimb
Pentru Indy 10, folosiți o componentă TIdConnectThroughHttpProxy, disponibilă din IdConnectThroughHttpProxy. Presupunând că există o instanță existentă deținută de formular numită HttpTunnel:
HttpTunnel.Host := 'proxy.example.net';
HttpTunnel.Port := 8080;
HttpTunnel.Enabled := True;
MailSocket.TransparentProxy := HttpTunnel;
Dacă SMTP folosește MailTLS, atribuiți HttpTunnel proprietății TransparentProxy a acelui handler. Ținta de poștă rămâne pe Smtp.
Această componentă stabilește un tunel HTTP CONNECT și implementează autentificarea proxy de bază prin proprietățile sale Username și Password. Un proxy care cere alt mecanism de autentificare are nevoie de o implementare compatibilă; nu presupuneți că aceste două proprietăți acoperă toate schemele de autentificare HTTP.
Proxy-ul trebuie să permită și CONNECT către portul real al serverului de poștă. Permisiunea de a tunela către servere web pe 443 nu implică permisiunea de a ajunge la un serviciu de trimitere pe 587 sau la un server SMTP pe 25.
Conexiunea din Indy 9
Indy 9 folosește un TIdIOHandlerSocket și proprietatea sa SocksInfo. Cu componente deținute de formular numite Socket9 și Socks9, cablarea echivalentă este:
Smtp.IOHandler := Socket9;
Socket9.SocksInfo := Socks9;
Socks9.Host := 'proxy.example.net';
Socks9.Port := 1080;
Socks9.Version := svSocks5;
Implementarea SOCKS a acestuia acceptă versiunile 4, 4a și 5. Aranjamentul TransparentProxy și componentei HTTP CONNECT din Indy 10 nu poate fi lipit direct în această interfață mai veche.
Nu există o autentificare preliminară separată la proxy care să fie făcută cu un alt client TCP. Autentificarea proxy, configurarea tunelului și schimbul SMTP trebuie să aparțină conexiunii pe care componenta SMTP o folosește efectiv. Când acea cablare este corectă, o defecțiune poate fi localizată la negocierea proxy, la salutul SMTP, la TLS sau la autentificarea poștei, în loc să tratăm fiecare refuz ca pe o parolă de poștă greșită.