Suteikite Indy SMTP ryšiui proxy IOHandler
Prijunkite SOCKS arba HTTP CONNECT prie TIdSMTP naudodami tinkamos Indy versijos IOHandler savybes, atskirai su el. pašto ir proxy nustatymais.
Indy programoje prijunkite proxy prie IOHandler, kurį naudoja TIdSMTP. Laikykite TIdSMTP.Host ir Port nukreiptus į pašto paslaugą. IOHandler proxy komponentas pateikia tarpininko adresą ir atlieka proxy rankos paspaudimą tame pačiame ryšyje.
Naudojama savybė priklauso nuo Indy versijos: Indy 9 pateikia SocksInfo; Indy 10 naudoja TransparentProxy. Patikrinkite programos komponentų biblioteką, o ne rinkitės pavyzdį vien pagal Delphi leidimo pavadinimą.
Indy 10 su SOCKS5
Tarkime, kad forma jau turi šiuos komponentus:
Smtp: TIdSMTPMailSocket: TIdIOHandlerStackSocks: TIdSocksInfo
Prijunkite ir sukonfigūruokite juos prieš atidarydami SMTP ryšį:
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;
Prievadų reikšmės yra pavyzdžiai. SMTP prievadas turi atitikti paslaugą ir TLS režimą, kurį ketinate naudoti. SOCKS prievadas priklauso proxy.
Leidžiamam viešam SMTP testui, kai leidžiamas viešas tarpininkas, SOCKS5 proxy sąrašas siūlo kandidatų adresus. Patvirtinkite, kad kandidatas leidžia tikrąjį pašto mazgą ir prievadą, ir naudokite šaką be proxy autentifikavimo, nesaugodami ankstesnio proxy kredencialų.
TIdSocksInfo prasideda nuo svNoSocks, todėl vien proxy mazgo pavadinimo nustatymas jo neaktyvuoja. Pasirinkite tinkamą SOCKS versiją. Jei proxy reikalauja SOCKS5 vartotojo vardo/slaptažodžio autentifikavimo, sukonfigūruokite ir autentifikavimo metodą, ir kredencialus:
Socks.Authentication := saUsernamePassword;
Socks.Username := ProxyUser;
Socks.Password := ProxyPassword;
ProxyUser ir ProxyPassword reiškia reikšmes, kurias pateikia programa. Šios savybės autentifikuojasi proxy atžvilgiu. SMTP paskyrą ir jos autentifikavimo metodą sukonfigūruokite atskirai pašto kliente.
Esamo TLS IOHandler išlaikymas
Pašto klientui, naudojančiam STARTTLS arba implicitinį TLS, reikia savo SSL palaikančio IOHandler. Nekeiskite to komponento paprastu TIdIOHandlerStack vien tam, kad pridėtumėte proxy.
Indy 10 SSL IOHandler pagrindas kyla iš TIdIOHandlerStack ir paveldi jo proxy palaikymą. Esamam suderinamam SSL IOHandler, pavadintam MailTLS, ryšys tampa:
Smtp.IOHandler := MailTLS;
MailTLS.TransparentProxy := Socks;
SMTP komponento UseTLS nustatymas vis dar parenka pašto paslaugos TLS režimą. Sertifikato pasitikėjimą ir mazgo pavadinimo tikrinimą sukonfigūruokite TLS integracijoje, skirtoje smtp.example.net, o ne proxy mazgo pavadinimui. Tunelio pridėjimas pats savaime nenustato sertifikato tikrinimo.
Naudoti HTTP CONNECT proxy vietoj to
Indy 10 atveju naudokite TIdConnectThroughHttpProxy komponentą, pasiekiamą iš IdConnectThroughHttpProxy. Darant prielaidą, kad yra esamas formos valdomas egzempliorius, pavadintas HttpTunnel:
HttpTunnel.Host := 'proxy.example.net';
HttpTunnel.Port := 8080;
HttpTunnel.Enabled := True;
MailSocket.TransparentProxy := HttpTunnel;
Jei SMTP naudoja MailTLS, priskirkite HttpTunnel to apdorojimo įrenginio TransparentProxy savybei. Pašto tikslas lieka Smtp.
Šis komponentas sukuria HTTP CONNECT tunelį ir įgyvendina pagrindinį proxy autentifikavimą per savo Username ir Password savybes. Proxy, reikalaujantis kito autentifikavimo mechanizmo, turi atitinkamą įgyvendinimą; nemanau, kad šios dvi savybės suteikia visas HTTP autentifikavimo schemas.
Proxy taip pat turi leisti CONNECT į tikrąjį pašto serverio prievadą. Leidimas tuneliuoti į žiniatinklio serverius 443 prievade nereiškia leidimo pasiekti siuntimo paslaugą 587 prievade ar SMTP serverį 25 prievade.
Indy 9 ryšys
Indy 9 naudoja TIdIOHandlerSocket ir jo SocksInfo savybę. Su formos valdomais komponentais, pavadintais Socket9 ir Socks9, lygiavertis sujungimas yra:
Smtp.IOHandler := Socket9;
Socket9.SocksInfo := Socks9;
Socks9.Host := 'proxy.example.net';
Socks9.Port := 1080;
Socks9.Version := svSocks5;
Jo SOCKS įgyvendinimas palaiko 4, 4a ir 5 versijas. Indy 10 TransparentProxy ir HTTP CONNECT komponento išdėstymas negali būti tiesiog įklijuotas į šią senesnę sąsają.
Nėra atskiro parengiamojo proxy prisijungimo, kurį reikėtų atlikti kitu TCP klientu. Proxy autentifikavimas, tunelio nustatymas ir SMTP mainai turi priklausyti ryšiui, kurį SMTP komponentas iš tikrųjų naudoja. Kai šis sujungimas teisingas, gedimą galima lokalizuoti proxy derybose, SMTP pasisveikinime, TLS ar pašto autentifikavime, o ne laikyti kiekvieną atmetimą blogu pašto slaptažodžiu.