Az Indyben a proxyt ahhoz az IOHandlerhez csatolja, amelyet a TIdSMTP használ. Tartsa a TIdSMTP.Host és a Port értékét a levelezőszolgálatra irányítva. Az IOHandler proxy-összetevője adja a közvetítő címét, és ugyanazon a kapcsolaton végzi el a proxy kézfogást.

A használandó tulajdonság az Indy verziójától függ: az Indy 9 a SocksInfo tulajdonságot kínálja; az Indy 10 a TransparentProxy tulajdonságot használja. Ellenőrizze az alkalmazás összetevő-könyvtárát, ahelyett hogy csak a Delphi kiadás neve alapján választana példát.

Indy 10 SOCKS5-tel

Tegyük fel, hogy az űrlap már tartalmazza ezeket az összetevőket:

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

Csatlakoztassa és állítsa be őket az SMTP-kapcsolat megnyitása előtt:

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;

A portértékek példák. Az SMTP-portnak meg kell felelnie a használni kívánt szolgálatnak és TLS-módnak. A SOCKS-port a proxyhoz tartozik.

Egy engedélyezett nyilvános SMTP-teszthez, ahol nyilvános közvetítő megengedett, a SOCKS5 proxy lista jelölt címeket kínál. Erősítse meg, hogy a jelölt engedélyezi a tényleges levélkiszolgálót és portot, és a proxy-hitelesítés nélküli ágat használja, anélkül hogy korábbi proxy hitelesítő adatait megtartaná.

A TIdSocksInfo a svNoSocks értékkel indul, tehát önmagában a proxy-gépnév beállítása nem aktiválja. Válassza a megfelelő SOCKS-verziót. Ha a proxy SOCKS5 felhasználónév/jelszó hitelesítést kér, állítsa be a hitelesítési módszert és a hitelesítő adatokat is:

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

A ProxyUser és a ProxyPassword az alkalmazás által szolgáltatott értékeket jelöli. Ezek a tulajdonságok a proxy felé hitelesítenek. Az SMTP-fiókot és annak hitelesítési módszerét külön állítsa be a levelezőkliensben.

Meglévő TLS IOHandler megtartása

A STARTTLS-t vagy implicit TLS-t használó levelezőkliensnek szüksége van az SSL-képes IOHandlerére. Ne cserélje le ezt az összetevőt egyszerű TIdIOHandlerStack-re csak a proxy hozzáadásához.

Az Indy 10-ben az SSL IOHandler alapja a TIdIOHandlerStack-ből származik, és örökli annak proxy-támogatását. Egy meglévő, kompatibilis, MailTLS nevű SSL IOHandler esetében a kapcsolat így alakul:

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

Az SMTP-összetevő UseTLS beállítása továbbra is a levelezőszolgálat TLS-módját választja. A tanúsítvány-bizalmat és a gépnév-ellenőrzést a smtp.example.net TLS-integrációjában állítsa be, nem a proxy gépnevéhez. Az alagút hozzáadása önmagában nem hoz létre tanúsítvány-ellenőrzést.

HTTP CONNECT proxy használata helyette

Az Indy 10-hez használja a TIdConnectThroughHttpProxy összetevőt, amely a IdConnectThroughHttpProxy-ből érhető el. Feltételezve, hogy létezik egy űrlap-tulajdonú példány HttpTunnel néven:

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

Ha az SMTP a MailTLS-t használja, rendelje a HttpTunnel-t inkább annak a kezelőnek a TransparentProxy tulajdonságához. A levélcél a Smtp-en marad.

Ez az összetevő HTTP CONNECT alagutat hoz létre, és Basic proxy-hitelesítést valósít meg Username és Password tulajdonságain keresztül. A más hitelesítési mechanizmust igénylő proxy kompatibilis megvalósítást igényel; ne feltételezze, hogy ez a két tulajdonság minden HTTP-hitelesítési sémát lefed.

A proxynak engedélyeznie kell a CONNECT-et a levelezőkiszolgáló tényleges portjára. A 443-as webkiszolgálók felé történő alagútengedély nem jelenti az 587-es beküldési szolgálat vagy a 25-es SMTP-kiszolgáló elérésének engedélyét.

Az Indy 9 kapcsolat

Az Indy 9 egy TIdIOHandlerSocket-et és annak SocksInfo tulajdonságát használja. A Socket9 és Socks9 nevű, űrlap-tulajdonú összetevőkkel az egyenértékű bekötés:

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

Ennek SOCKS-megvalósítása a 4., 4a. és 5. verziót támogatja. Az Indy 10 TransparentProxy és HTTP CONNECT összetevő-elrendezése nem illeszthető be egyszerűen ebbe a régebbi felületbe.

Nincs külön előzetes proxy-bejelentkezés, amelyet másik TCP-klienssel kellene elvégezni. A proxy-hitelesítésnek, az alagút beállításának és az SMTP-cserének ahhoz a kapcsolathoz kell tartoznia, amelyet az SMTP-összetevő ténylegesen használ. Ha ez a bekötés helyes, a hiba a proxy-tárgyalásnál, az SMTP-köszönésnél, a TLS-nél vagy a levél-hitelesítésnél lokalizálható, ahelyett hogy minden elutasítást rossz levéljelszónak tekintenénk.

Kapcsolódó cikkek