Дайте на SMTP връзката на Indy прокси IOHandler
Свържете SOCKS или HTTP CONNECT към TIdSMTP чрез свойствата IOHandler на правилната версия на Indy, с отделни настройки за поща и прокси.
В Indy прикачете проксито към IOHandler, който използва TIdSMTP. Дръжте TIdSMTP.Host и Port насочени към пощенската услуга. Прокси компонентът на IOHandler предоставя адреса на посредника и извършва прокси ръкостискането по същата връзка.
Свойството, което използвате, зависи от версията на Indy: Indy 9 предоставя SocksInfo; Indy 10 използва TransparentProxy. Проверете библиотеката с компоненти в приложението, вместо да избирате пример само по името на изданието на Delphi.
Indy 10 със SOCKS5
Да предположим, че формулярът вече притежава тези компоненти:
Smtp: TIdSMTPMailSocket: TIdIOHandlerStackSocks: TIdSocksInfo
Свържете ги и ги конфигурирайте, преди да отворите 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;
Стойностите на портовете са примери. SMTP портът трябва да съответства на услугата и TLS режима, който смятате да използвате. SOCKS портът принадлежи на проксито.
За разрешен публичен SMTP тест, при който е позволен публичен посредник, списъкът със SOCKS5 проксита предлага кандидат адреси. Потвърдете, че кандидатът разрешава действителния пощенски хост и порт, и използвайте клона без прокси удостоверяване, без да запазвате данни за достъп от по-ранно прокси.
TIdSocksInfo започва със svNoSocks, така че самото задаване на име на прокси хост не го активира. Изберете подходящата версия на SOCKS. Ако проксито изисква SOCKS5 удостоверяване с потребителско име/парола, конфигурирайте и метода за удостоверяване, и данните за достъп:
Socks.Authentication := saUsernamePassword;
Socks.Username := ProxyUser;
Socks.Password := ProxyPassword;
ProxyUser и ProxyPassword представляват стойности, предоставени от приложението. Тези свойства се удостоверяват пред проксито. Конфигурирайте SMTP акаунта и неговия метод за удостоверяване отделно в пощенския клиент.
Запазване на съществуващ TLS IOHandler
Пощенски клиент, който използва STARTTLS или имплицитен TLS, се нуждае от своя IOHandler с SSL поддръжка. Не заменяйте този компонент с обикновен TIdIOHandlerStack само за да добавите проксито.
В Indy 10 базата на SSL IOHandler произхожда от TIdIOHandlerStack и наследява прокси поддръжката му. За съществуващ съвместим SSL IOHandler с име MailTLS връзката става:
Smtp.IOHandler := MailTLS;
MailTLS.TransparentProxy := Socks;
Настройката UseTLS на SMTP компонента все още избира TLS режима на пощенската услуга. Конфигурирайте доверието към сертификата и проверката на името на хоста в TLS интеграцията за smtp.example.net, а не за името на прокси хоста. Добавянето на тунел само по себе си не установява проверка на сертификата.
Използване на HTTP CONNECT прокси вместо това
За Indy 10 използвайте компонент TIdConnectThroughHttpProxy, достъпен от IdConnectThroughHttpProxy. Ако приемем, че съществува притежаван от формуляра екземпляр с име HttpTunnel:
HttpTunnel.Host := 'proxy.example.net';
HttpTunnel.Port := 8080;
HttpTunnel.Enabled := True;
MailSocket.TransparentProxy := HttpTunnel;
Ако SMTP използва MailTLS, задайте HttpTunnel на свойството TransparentProxy на този манипулатор. Пощенската цел остава на Smtp.
Този компонент установява тунел HTTP CONNECT и реализира Basic прокси удостоверяване чрез свойствата си Username и Password. Прокси, което изисква друг механизъм за удостоверяване, се нуждае от съвместима реализация; не предполагайте, че тези две свойства осигуряват всички схеми за HTTP удостоверяване.
Проксито също трябва да разрешава CONNECT към действителния порт на пощенския сървър. Разрешението за тунел към уеб сървъри на 443 не означава разрешение за достъп до услуга за подаване на 587 или SMTP сървър на 25.
Връзката на Indy 9
Indy 9 използва TIdIOHandlerSocket и неговото свойство SocksInfo. С притежавани от формуляра компоненти с имена Socket9 и Socks9 еквивалентното свързване е:
Smtp.IOHandler := Socket9;
Socket9.SocksInfo := Socks9;
Socks9.Host := 'proxy.example.net';
Socks9.Port := 1080;
Socks9.Version := svSocks5;
Неговата SOCKS реализация поддържа версии 4, 4a и 5. Подредбата TransparentProxy и HTTP CONNECT компонент от Indy 10 не може просто да се постави в този по-стар интерфейс.
Няма отделно предварително влизане в проксито, което да се извършва с друг TCP клиент. Прокси удостоверяването, настройката на тунела и SMTP обменът трябва да принадлежат на връзката, която SMTP компонентът действително използва. Когато това свързване е правилно, отказ може да се локализира при прокси договарянето, SMTP поздрава, TLS или пощенското удостоверяване, вместо всяка повреда да се приема за грешна пощенска парола.