A Indy, adjunteu el proxy a l'IOHandler que utilitza TIdSMTP. Manteniu TIdSMTP.Host i Port apuntant al servei de correu. El component de proxy de l'IOHandler proporciona l'adreça de l'intermediari i fa l'apretada de mans del proxy en aquesta mateixa connexió.

La propietat que feu servir depèn de la versió d'Indy: Indy 9 exposa SocksInfo; Indy 10 utilitza TransparentProxy. Reviseu la biblioteca de components de l'aplicació en lloc de triar un exemple només pel nom de la versió de Delphi.

Indy 10 amb SOCKS5

Suposem que el formulari ja té aquests components:

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

Connecteu-los i configureu-los abans d'obrir la connexió 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;

Els valors dels ports són exemples. El port SMTP ha de coincidir amb el servei i el mode TLS que voleu utilitzar. El port SOCKS pertany al proxy.

Per a una prova SMTP pública permesa on s'admet un intermediari públic, la llista de proxys SOCKS5 ofereix adreces candidates. Confirmeu que el candidat permet l'amfitrió i el port de correu reals, i feu servir la branca sense autenticació de proxy sense conservar credencials d'un proxy anterior.

TIdSocksInfo comença amb svNoSocks, així que només definir un nom d'amfitrió de proxy no l'activa. Trieu la versió de SOCKS adequada. Si el proxy requereix autenticació SOCKS5 amb nom d'usuari/contrasenya, configureu el mètode d'autenticació i també les credencials:

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

ProxyUser i ProxyPassword representen valors que proporciona l'aplicació. Aquestes propietats s'autentiquen amb el proxy. Configureu el compte SMTP i el seu mètode d'autenticació per separat al client de correu.

Conservar un IOHandler TLS existent

Un client de correu que utilitza STARTTLS o TLS implícit necessita el seu IOHandler amb capacitat SSL. No substituïu aquest component per un TIdIOHandlerStack simple només per afegir el proxy.

A Indy 10, la base de l'IOHandler SSL descendeix de TIdIOHandlerStack i n'hereta el suport de proxy. Per a un IOHandler SSL compatible existent anomenat MailTLS, la connexió passa a ser:

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

El paràmetre UseTLS del component SMTP continua seleccionant el mode TLS del servei de correu. Configureu la confiança en el certificat i la validació del nom d'amfitrió a la integració TLS per a smtp.example.net, no per al nom d'amfitrió del proxy. Afegir un túnel no estableix per si mateix la validació de certificats.

Utilitzar un proxy HTTP CONNECT en lloc d'això

Per a Indy 10, feu servir un component TIdConnectThroughHttpProxy, disponible a IdConnectThroughHttpProxy. Suposant una instància existent propietat del formulari anomenada HttpTunnel:

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

Si SMTP utilitza MailTLS, assigneu HttpTunnel a la propietat TransparentProxy d'aquest gestor. L'objectiu de correu continua a Smtp.

Aquest component estableix un túnel HTTP CONNECT i implementa l'autenticació bàsica de proxy mitjançant les seves propietats Username i Password. Un proxy que requereixi un altre mecanisme d'autenticació necessita una implementació compatible; no suposeu que aquestes dues propietats cobreixen tots els esquemes d'autenticació HTTP.

El proxy també ha de permetre CONNECT al port real del servidor de correu. El permís per fer túnel cap a servidors web al 443 no implica permís per arribar a un servei de tramesa al 587 o a un servidor SMTP al 25.

La connexió d'Indy 9

Indy 9 utilitza un TIdIOHandlerSocket i la seva propietat SocksInfo. Amb components propietat del formulari anomenats Socket9 i Socks9, el cablejat equivalent és:

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

La seva implementació de SOCKS admet les versions 4, 4a i 5. La disposició de TransparentProxy i del component HTTP CONNECT d'Indy 10 no es pot enganxar directament en aquesta interfície més antiga.

No hi ha cap inici de sessió previ de proxy separat que calgui fer amb un altre client TCP. L'autenticació del proxy, la configuració del túnel i l'intercanvi SMTP han de pertànyer a la connexió que el component SMTP utilitza realment. Quan aquest cablejat és correcte, un error es pot localitzar en la negociació del proxy, la salutació SMTP, el TLS o l'autenticació del correu, en lloc de tractar cada rebuig com una contrasenya de correu dolenta.

Articles relacionats