Adjon az Indy SMTP-kapcsolatának proxy IOHandler-t
Kapcsolja a SOCKS-ot vagy HTTP CONNECT-et a TIdSMTP-hez a megfelelő Indy-verzió IOHandler-tulajdonságaival, külön levél- és proxybeállításokkal.
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: TIdSMTPMailSocket: TIdIOHandlerStackSocks: 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.