Indy'nin SMTP bağlantısına proxy IOHandler verin
Doğru Indy sürümünün IOHandler özellikleriyle SOCKS veya HTTP CONNECT'i TIdSMTP'ye bağlayın; posta ve proxy ayarları ayrı olsun.
Indy'de proxy'yi TIdSMTP öğesinin kullandığı IOHandler'a bağlayın. TIdSMTP.Host ve Port değerlerini posta hizmetine yöneltilmiş tutun. IOHandler'ın proxy bileşeni aracı sunucunun adresini sağlar ve proxy el sıkışmasını aynı bağlantı üzerinde gerçekleştirir.
Kullanacağınız özellik Indy sürümüne bağlıdır: Indy 9 SocksInfo sunar; Indy 10 TransparentProxy kullanır. Örneği yalnızca Delphi sürümünün adına göre seçmek yerine uygulamadaki bileşen kitaplığını denetleyin.
SOCKS5 ile Indy 10
Formun bu bileşenlere zaten sahip olduğunu varsayalım:
Smtp: TIdSMTPMailSocket: TIdIOHandlerStackSocks: TIdSocksInfo
SMTP bağlantısını açmadan önce bunları bağlayın ve yapılandırın:
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;
Bağlantı noktası değerleri örnektir. SMTP bağlantı noktası, kullanmayı planladığınız hizmete ve TLS kipine uygun olmalıdır. SOCKS bağlantı noktası proxy'ye aittir.
Herkese açık bir aracı sunucunun izin verildiği izinli bir genel SMTP testi için SOCKS5 proxy listesi aday adresler sunar. Adayın gerçek posta ana bilgisayarına ve bağlantı noktasına izin verdiğini doğrulayın ve önceki bir proxy'den kalan kimlik bilgilerini saklamadan proxy kimlik doğrulaması olmayan dalı kullanın.
TIdSocksInfo svNoSocks ile başlar, bu nedenle yalnızca bir proxy ana bilgisayar adı ayarlamak onu etkinleştirmez. Uygun SOCKS sürümünü seçin. Proxy, SOCKS5 kullanıcı adı/parola kimlik doğrulaması gerektiriyorsa hem kimlik doğrulama yöntemini hem de kimlik bilgilerini yapılandırın:
Socks.Authentication := saUsernamePassword;
Socks.Username := ProxyUser;
Socks.Password := ProxyPassword;
ProxyUser ve ProxyPassword uygulamanın sağladığı değerleri temsil eder. Bu özellikler proxy'ye karşı kimlik doğrular. SMTP hesabını ve kimlik doğrulama yöntemini posta istemcisinde ayrı olarak yapılandırın.
Var olan bir TLS IOHandler'ı korumak
STARTTLS veya örtük TLS kullanan bir posta istemcisi, SSL yetenekli IOHandler'ına gereksinim duyar. Yalnızca proxy'yi eklemek için bu bileşeni düz bir TIdIOHandlerStack ile değiştirmeyin.
Indy 10'da SSL IOHandler tabanı TIdIOHandlerStack öğesinden türer ve proxy desteğini devralır. MailTLS adlı var olan uyumlu bir SSL IOHandler için bağlantı şöyle olur:
Smtp.IOHandler := MailTLS;
MailTLS.TransparentProxy := Socks;
SMTP bileşeninin UseTLS ayarı hâlâ posta hizmetinin TLS kipini seçer. Sertifika güvenini ve ana bilgisayar adı doğrulamasını smtp.example.net için TLS entegrasyonunda yapılandırın, proxy ana bilgisayar adı için değil. Tünel eklemek tek başına sertifika doğrulaması kurmaz.
Bunun yerine HTTP CONNECT proxy kullanmak
Indy 10 için TIdConnectThroughHttpProxy bileşenini kullanın; bu bileşen IdConnectThroughHttpProxy içinde bulunur. Forma ait HttpTunnel adlı var olan bir örneğin bulunduğunu varsayarak:
HttpTunnel.Host := 'proxy.example.net';
HttpTunnel.Port := 8080;
HttpTunnel.Enabled := True;
MailSocket.TransparentProxy := HttpTunnel;
SMTP MailTLS kullanıyorsa bunun yerine HttpTunnel öğesini o işleyicinin TransparentProxy özelliğine atayın. Posta hedefi Smtp üzerinde kalır.
Bu bileşen bir HTTP CONNECT tüneli kurar ve Basic proxy kimlik doğrulamasını Username ve Password özellikleri aracılığıyla uygular. Başka bir kimlik doğrulama mekanizması gerektiren proxy uyumlu bir uygulama gerektirir; bu iki özelliğin tüm HTTP kimlik doğrulama şemalarını sağladığını varsaymayın.
Proxy ayrıca posta sunucusunun gerçek bağlantı noktasına CONNECT'e izin vermelidir. 443 üzerindeki web sunucularına tünel izni, 587 üzerindeki bir gönderim hizmetine veya 25 üzerindeki bir SMTP sunucusuna erişim izni anlamına gelmez.
Indy 9 bağlantısı
Indy 9, TIdIOHandlerSocket ve onun SocksInfo özelliğini kullanır. Socket9 ve Socks9 adlı forma ait bileşenlerle eşdeğer kablolama şöyledir:
Smtp.IOHandler := Socket9;
Socket9.SocksInfo := Socks9;
Socks9.Host := 'proxy.example.net';
Socks9.Port := 1080;
Socks9.Version := svSocks5;
Onun SOCKS uygulaması 4, 4a ve 5 sürümlerini destekler. Indy 10'un TransparentProxy ve HTTP CONNECT bileşeni düzeni bu daha eski arabirime doğrudan yapıştırılamaz.
Başka bir TCP istemcisiyle yapılacak ayrı bir ön proxy oturum açması yoktur. Proxy kimlik doğrulaması, tünel kurulumu ve SMTP alışverişi, SMTP bileşeninin gerçekte kullandığı bağlantıya ait olmalıdır. Bu kablolama doğru olduğunda bir arıza proxy görüşmesinde, SMTP selamlamasında, TLS'te veya posta kimlik doğrulamasında saptanabilir; her ret kötü bir posta parolası sayılmaz.