En Indy, ligue o proxy ao IOHandler que usa TIdSMTP. Manteña TIdSMTP.Host e Port apuntando ao servizo de correo. O compoñente de proxy do IOHandler fornece o enderezo do intermediario e realiza o handshake do proxy nesa mesma conexión.

A propiedade que use depende da versión de Indy: Indy 9 expón SocksInfo; Indy 10 usa TransparentProxy. Revise a biblioteca de compoñentes da aplicación en lugar de escoller un exemplo só polo nome da versión de Delphi.

Indy 10 con SOCKS5

Supoña que o formulario xa ten estes compoñentes:

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

Conécteos e configúreos antes de abrir a conexión 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;

Os valores dos portos son exemplos. O porto SMTP debe coincidir co servizo e o modo TLS que pensa usar. O porto SOCKS pertence ao proxy.

Para unha proba SMTP pública permitida na que se admite un intermediario público, a lista de proxies SOCKS5 ofrece enderezos candidatos. Confirme que o candidato permite o host e o porto de correo reais, e use a rama sen autenticación de proxy sen conservar credenciais dun proxy anterior.

TIdSocksInfo comeza con svNoSocks, así que só definir un nome de host de proxy non o activa. Escolla a versión de SOCKS axeitada. Se o proxy require autenticación SOCKS5 con usuario e contrasinal, configure o método de autenticación ademais das credenciais:

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

ProxyUser e ProxyPassword representan valores que fornece a aplicación. Estas propiedades autentícanse co proxy. Configure a conta SMTP e o seu método de autenticación por separado no cliente de correo.

Conservar un IOHandler TLS existente

Un cliente de correo que usa STARTTLS ou TLS implícito necesita o seu IOHandler con capacidade SSL. Non substitúa ese compoñente por un TIdIOHandlerStack simple só para engadir o proxy.

En Indy 10, a base do IOHandler SSL descende de TIdIOHandlerStack e herda o seu soporte de proxy. Para un IOHandler SSL compatible existente chamado MailTLS, a conexión queda así:

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

O axuste UseTLS do compoñente SMTP segue seleccionando o modo TLS do servizo de correo. Configure a confianza de certificados e a validación do nome de host na integración TLS para smtp.example.net, non para o nome de host do proxy. Engadir un túnel non estabelece por si mesmo a validación de certificados.

Usar un proxy HTTP CONNECT no seu lugar

Para Indy 10, use un compoñente TIdConnectThroughHttpProxy, dispoñible en IdConnectThroughHttpProxy. Supoñendo unha instancia existente propiedade do formulario chamada HttpTunnel:

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

Se SMTP usa MailTLS, asigne HttpTunnel á TransparentProxy dese controlador no seu lugar. O destino de correo permanece en Smtp.

Este compoñente estabelece un túnel HTTP CONNECT e implementa autenticación básica de proxy mediante as súas propiedades Username e Password. Un proxy que exixa outro mecanismo de autenticación necesita unha implementación compatible; non supoña que estas dúas propiedades cobren todos os esquemas de autenticación HTTP.

O proxy tamén debe permitir CONNECT ao porto real do servidor de correo. O permiso para tunelar cara a servidores web no 443 non implica permiso para chegar a un servizo de envío no 587 ou a un servidor SMTP no 25.

A conexión de Indy 9

Indy 9 usa un TIdIOHandlerSocket e a súa propiedade SocksInfo. Con compoñentes propiedade do formulario chamados Socket9 e Socks9, o cableado equivalente é:

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

A súa implementación de SOCKS admite as versións 4, 4a e 5. A disposición de TransparentProxy e do compoñente HTTP CONNECT de Indy 10 non se pode pegar sen máis nesta interface máis antiga.

Non hai un inicio de sesión previo de proxy separado que facer con outro cliente TCP. A autenticación do proxy, a configuración do túnel e o intercambio SMTP deben pertencer á conexión que o compoñente SMTP usa realmente. Cando ese cableado é correcto, un fallo pódese localizar na negociación do proxy, o saúdo SMTP, TLS ou a autenticación de correo, en lugar de tratar cada rexeitamento como un contrasinal de correo incorrecto.

Artigos relacionados