W Indy podłącz serwer proxy do IOHandlera, którego używa TIdSMTP. Trzymaj TIdSMTP.Host i Port skierowane na usługę pocztową. Komponent proxy IOHandlera podaje adres pośrednika i wykonuje uzgadnianie proxy na tym samym połączeniu.

Używana właściwość zależy od wersji Indy: Indy 9 udostępnia SocksInfo; Indy 10 korzysta z TransparentProxy. Sprawdź bibliotekę komponentów w aplikacji, zamiast wybierać przykład tylko na podstawie nazwy wydania Delphi.

Indy 10 z SOCKS5

Załóżmy, że formularz ma już te komponenty:

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

Połącz i skonfiguruj je przed otwarciem połączenia 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;

Wartości portów są przykładami. Port SMTP musi odpowiadać usłudze i trybowi TLS, którego zamierzasz użyć. Port SOCKS należy do serwera proxy.

Do dozwolonego publicznego testu SMTP, w którym publiczny pośrednik jest dopuszczony, lista proxy SOCKS5 oferuje adresy kandydujące. Potwierdź, że kandydat dopuszcza rzeczywisty host i port poczty, i użyj gałęzi bez uwierzytelniania proxy, nie zachowując poświadczeń z wcześniejszego serwera proxy.

TIdSocksInfo zaczyna od svNoSocks, więc samo ustawienie nazwy hosta proxy go nie włącza. Wybierz odpowiednią wersję SOCKS. Jeśli serwer proxy wymaga uwierzytelniania SOCKS5 nazwą użytkownika i hasłem, skonfiguruj zarówno metodę uwierzytelniania, jak i poświadczenia:

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

ProxyUser i ProxyPassword oznaczają wartości dostarczane przez aplikację. Te właściwości uwierzytelniają się wobec serwera proxy. Skonfiguruj konto SMTP i jego metodę uwierzytelniania osobno w kliencie poczty.

Zachowanie istniejącego IOHandlera TLS

Klient poczty korzystający z STARTTLS lub niejawnego TLS potrzebuje swojego IOHandlera obsługującego SSL. Nie zastępuj tego komponentu zwykłym TIdIOHandlerStack tylko po to, aby dodać serwer proxy.

W Indy 10 podstawa IOHandlera SSL wywodzi się z TIdIOHandlerStack i dziedziczy jego obsługę proxy. Dla istniejącego zgodnego IOHandlera SSL o nazwie MailTLS połączenie wygląda tak:

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

Ustawienie UseTLS komponentu SMTP nadal wybiera tryb TLS usługi pocztowej. Skonfiguruj zaufanie do certyfikatu i walidację nazwy hosta w integracji TLS dla smtp.example.net, a nie dla nazwy hosta proxy. Dodanie tunelu samo w sobie nie ustanawia walidacji certyfikatu.

Użycie serwera proxy HTTP CONNECT zamiast tego

Dla Indy 10 użyj komponentu TIdConnectThroughHttpProxy, dostępnego w IdConnectThroughHttpProxy. Zakładając, że istnieje należąca do formularza instancja o nazwie HttpTunnel:

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

Jeśli SMTP używa MailTLS, przypisz HttpTunnel do właściwości TransparentProxy tego modułu obsługi. Cel poczty pozostaje na Smtp.

Ten komponent ustanawia tunel HTTP CONNECT i implementuje podstawowe uwierzytelnianie proxy przez właściwości Username i Password. Serwer proxy wymagający innego mechanizmu uwierzytelniania potrzebuje zgodnej implementacji; nie zakładaj, że te dwie właściwości zapewniają wszystkie schematy uwierzytelniania HTTP.

Serwer proxy musi także zezwalać na CONNECT do rzeczywistego portu serwera poczty. Zezwolenie na tunelowanie do serwerów WWW na porcie 443 nie oznacza zezwolenia na dotarcie do usługi wysyłania na porcie 587 ani do serwera SMTP na porcie 25.

Połączenie w Indy 9

Indy 9 używa TIdIOHandlerSocket i jego właściwości SocksInfo. Z komponentami należącymi do formularza o nazwach Socket9 i Socks9 równoważne połączenie wygląda tak:

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

Jego implementacja SOCKS obsługuje wersje 4, 4a i 5. Układu TransparentProxy i komponentu HTTP CONNECT z Indy 10 nie można po prostu wkleić do tego starszego interfejsu.

Nie istnieje osobne wstępne logowanie do serwera proxy wykonywane innym klientem TCP. Uwierzytelnianie proxy, konfiguracja tunelu i wymiana SMTP muszą należeć do połączenia, którego komponent SMTP faktycznie używa. Gdy to połączenie jest poprawne, awarię można zlokalizować na etapie negocjacji proxy, powitania SMTP, TLS lub uwierzytelniania poczty, zamiast traktować każde odrzucenie jako błędne hasło poczty.

Powiązane artykuły