Տվեք Indy-ի SMTP կապին proxy IOHandler
Միացրեք SOCKS կամ HTTP CONNECT-ը TIdSMTP-ին ճիշտ Indy տարբերակի IOHandler հատկություններով՝ առանձին փոստի և proxy-ի կարգավորումներով։
Indy-ում proxy-ն կցեք այն IOHandler-ին, որն օգտագործում է TIdSMTP-ը։ TIdSMTP.Host-ը և Port-ը պահեք ուղղված փոստային ծառայությանը։ IOHandler-ի proxy բաղադրիչը տալիս է միջնորդի հասցեն և կատարում է proxy ձեռքսեղմումը նույն կապի վրա։
Ձեր օգտագործած հատկությունը կախված է 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 պորտը պատկանում է proxy-ին։
Թույլատրված հանրային SMTP փորձարկման համար, որտեղ հանրային միջնորդը թույլատրվում է, SOCKS5 proxy ցանկը առաջարկում է թեկնածու հասցեներ։ Հաստատեք, որ թեկնածուն թույլատրում է փաստացի փոստային հոսթը և պորտը, և օգտագործեք առանց proxy նույնականացման ճյուղը՝ չպահելով նախորդ proxy-ի հավատարմագրերը։
TIdSocksInfo-ը սկսվում է svNoSocks-ով, ուստի միայն proxy հոսթի անունը սահմանելը այն չի ակտիվացնում։ Ընտրեք համապատասխան SOCKS տարբերակը։ Եթե proxy-ն պահանջում է SOCKS5 օգտանուն/գաղտնաբառ նույնականացում, կարգավորեք և՛ նույնականացման մեթոդը, և՛ հավատարմագրերը՝
Socks.Authentication := saUsernamePassword;
Socks.Username := ProxyUser;
Socks.Password := ProxyPassword;
ProxyUser-ը և ProxyPassword-ը ներկայացնում են հավելվածի տրամադրած արժեքներ։ Այս հատկությունները նույնականացվում են proxy-ի հետ։ SMTP հաշիվը և դրա նույնականացման մեթոդը կարգավորեք առանձին փոստային հաճախորդում։
Գոյություն ունեցող TLS IOHandler-ի պահպանում
STARTTLS կամ ենթադրյալ TLS օգտագործող փոստային հաճախորդին անհրաժեշտ է իր SSL-ունակ IOHandler-ը։ Այդ բաղադրիչը մի փոխարինեք սովորական TIdIOHandlerStack-ով միայն proxy-ն ավելացնելու համար։
Indy 10-ում SSL IOHandler-ի հիմքը ծագում է TIdIOHandlerStack-ից և ժառանգում է դրա proxy աջակցությունը։ MailTLS անունով գոյություն ունեցող համատեղելի SSL IOHandler-ի համար կապը դառնում է՝
Smtp.IOHandler := MailTLS;
MailTLS.TransparentProxy := Socks;
SMTP բաղադրիչի UseTLS կարգավորումը դեռևս ընտրում է փոստային ծառայության TLS ռեժիմը։ Վկայագրի վստահությունը և հոսթի անվան վավերացումը կարգավորեք smtp.example.net-ի TLS ինտեգրման մեջ, ոչ proxy-ի հոսթի անվան համար։ Թունել ավելացնելը ինքնին չի հաստատում վկայագրի վավերացում։
Փոխարենը օգտագործել HTTP CONNECT proxy
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 թունել և իրականացնում է հիմնական proxy նույնականացում իր Username և Password հատկություններով։ Այլ նույնականացման մեխանիզմ պահանջող proxy-ին անհրաժեշտ է համատեղելի իրականացում. մի ենթադրեք, որ այս երկու հատկությունները տալիս են HTTP նույնականացման բոլոր սխեմաները։
Proxy-ն պետք է նաև թույլատրի CONNECT-ը փոստային սերվերի փաստացի պորտին։ 443-ի վեբ սերվերներ թունելավորելու թույլտվությունը չի նշանակում 587-ի ուղարկման ծառայությանը կամ 25-ի SMTP սերվերին հասնելու թույլտվություն։
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 տարբերակներին։ Indy 10-ի TransparentProxy և HTTP CONNECT բաղադրիչի դասավորությունը հնարավոր չէ պարզապես տեղադրել այս հին ինտերֆեյսում։
Առանձին նախնական proxy մուտք չկա, որը պետք է կատարվի այլ TCP հաճախորդով։ Proxy նույնականացումը, թունելի կարգավորումը և SMTP փոխանակումը պետք է պատկանեն այն կապին, որն իրականում օգտագործում է SMTP բաղադրիչը։ Երբ այդ միացումը ճիշտ է, խափանումը կարելի է տեղորոշել proxy բանակցության, SMTP ողջույնի, TLS-ի կամ փոստի նույնականացման մեջ՝ յուրաքանչյուր մերժումը սխալ փոստային գաղտնաբառ համարելու փոխարեն։