Anna Indyn SMTP-yhteydelle välityspalvelimen IOHandler
Yhdistä SOCKS tai HTTP CONNECT TIdSMTP:hen oikean Indy-version IOHandler-ominaisuuksilla, erillisillä posti- ja välityspalvelinasetuksilla.
Indyssä liitä välityspalvelin IOHandleriin, jota TIdSMTP käyttää. Pidä TIdSMTP.Host ja Port osoitettuina postipalveluun. IOHandlerin välityspalvelinkomponentti tarjoaa välittäjän osoitteen ja tekee välityspalvelimen kättelyn samalla yhteydellä.
Käytettävä ominaisuus riippuu Indy-versiosta: Indy 9 tarjoaa SocksInfo; Indy 10 käyttää TransparentProxy. Tarkista sovelluksen komponenttikirjasto sen sijaan, että valitsisit esimerkin pelkän Delphi-julkaisun nimen perusteella.
Indy 10 ja SOCKS5
Oletetaan, että lomakkeella on jo nämä komponentit:
Smtp: TIdSMTPMailSocket: TIdIOHandlerStackSocks: TIdSocksInfo
Yhdistä ja määritä ne ennen SMTP-yhteyden avaamista:
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;
Porttiarvot ovat esimerkkejä. SMTP-portin on vastattava palvelua ja TLS-tilaa, jota aiot käyttää. SOCKS-portti kuuluu välityspalvelimelle.
Sallittuun julkiseen SMTP-testiin, jossa julkinen välittäjä on sallittu, SOCKS5-välityspalvelinluettelo tarjoaa ehdokasosoitteita. Varmista, että ehdokas sallii todellisen posti-isännän ja portin, ja käytä haaraa ilman välityspalvelimen todennusta säilyttämättä aiemman välityspalvelimen tunnuksia.
TIdSocksInfo alkaa arvosta svNoSocks, joten pelkkä välityspalvelimen isäntänimen asettaminen ei aktivoi sitä. Valitse sopiva SOCKS-versio. Jos välityspalvelin vaatii SOCKS5-käyttäjätunnus/salasana-todennuksen, määritä sekä todennusmenetelmä että tunnukset:
Socks.Authentication := saUsernamePassword;
Socks.Username := ProxyUser;
Socks.Password := ProxyPassword;
ProxyUser ja ProxyPassword edustavat arvoja, jotka sovellus tarjoaa. Nämä ominaisuudet todennetaan välityspalvelimelle. Määritä SMTP-tili ja sen todennusmenetelmä erikseen postiohjelmassa.
Olemassa olevan TLS-IOHandlerin säilyttäminen
STARTTLS:iä tai implisiittistä TLS:ää käyttävä postiohjelma tarvitsee SSL-kykyisen IOHandlerinsa. Älä korvaa sitä komponenttia tavallisella TIdIOHandlerStack:llä vain välityspalvelimen lisäämiseksi.
Indyssä 10 SSL-IOHandlerin perusta polveutuu TIdIOHandlerStack:stä ja perii sen välityspalvelintuen. Olemassa olevalle yhteensopivalle SSL-IOHandlerille nimeltä MailTLS yhteys muuttuu muotoon:
Smtp.IOHandler := MailTLS;
MailTLS.TransparentProxy := Socks;
SMTP-komponentin UseTLS-asetus valitsee edelleen postipalvelun TLS-tilan. Määritä varmenteen luottamus ja isäntänimen vahvistus TLS-integraatiossa smtp.example.net:lle, ei välityspalvelimen isäntänimelle. Tunnelin lisääminen ei sinänsä luo varmenteen vahvistusta.
Käytä sen sijaan HTTP CONNECT -välityspalvelinta
Indy 10:lle käytä TIdConnectThroughHttpProxy-komponenttia, joka on saatavilla IdConnectThroughHttpProxy:stä. Oletetaan, että lomakkeelle kuuluva olemassa oleva ilmentymä on nimeltään HttpTunnel:
HttpTunnel.Host := 'proxy.example.net';
HttpTunnel.Port := 8080;
HttpTunnel.Enabled := True;
MailSocket.TransparentProxy := HttpTunnel;
Jos SMTP käyttää MailTLS:ää, kohdista HttpTunnel sen käsittelijän TransparentProxy-ominaisuuteen. Postikohde pysyy Smtp:ssä.
Tämä komponentti muodostaa HTTP CONNECT -tunnelin ja toteuttaa Basic-välityspalvelintodennuksen Username- ja Password-ominaisuuksiensa kautta. Välityspalvelin, joka vaatii toisen todennusmekanismin, tarvitsee yhteensopivan toteutuksen; älä oleta, että nämä kaksi ominaisuutta kattavat kaikki HTTP-todennusmenetelmät.
Välityspalvelimen on myös sallittava CONNECT postipalvelimen todelliseen porttiin. Lupa tunneloida verkkopalvelimiin portissa 443 ei tarkoita lupaa tavoittaa lähetyspalvelua portissa 587 tai SMTP-palvelinta portissa 25.
Indy 9 -yhteys
Indy 9 käyttää TIdIOHandlerSocket:ää ja sen SocksInfo-ominaisuutta. Kun lomakkeelle kuuluvat komponentit ovat nimeltään Socket9 ja Socks9, vastaava kytkentä on:
Smtp.IOHandler := Socket9;
Socket9.SocksInfo := Socks9;
Socks9.Host := 'proxy.example.net';
Socks9.Port := 1080;
Socks9.Version := svSocks5;
Sen SOCKS-toteutus tukee versioita 4, 4a ja 5. Indy 10:n TransparentProxy ja HTTP CONNECT -komponentin järjestelyä ei voi sellaisenaan liittää tähän vanhempaan rajapintaan.
Erillistä alustavaa välityspalvelinkirjautumista toisella TCP-asiakasohjelmalla ei ole. Välityspalvelimen todennuksen, tunnelin pystytyksen ja SMTP-vaihdon on kuuluttava yhteyteen, jota SMTP-komponentti todella käyttää. Kun kytkentä on oikein, vika voidaan paikantaa välityspalvelinneuvotteluun, SMTP-tervehdykseen, TLS:ään tai postitodennukseen sen sijaan, että jokainen hylkäys tulkittaisiin vääräksi postisalasanaksi.