Net::SMTP 3.16-ը նախապես միացված SOCKS կոնստրուկտոր չունի
Net::SMTP 3.16-ը չի փաստաթղթավորում նախապես միացված սոքեթի կոնստրուկտորի ընտրանք։ Պրոքսիով տրանսպորտի ինտեգրում ընտրելիս պահպանեք SMTP ողջույնը, EHLO-ն և TLS հաջորդականությունը։
Net::SMTP 3.16-ը չի փաստաթղթավորում SOCKS կամ նախապես միացված սոքեթի կոնստրուկտորի պարամետր։ Ֆայլի նկարագրիչը ժառանգված new_from_fd-ով փաթաթելը չի գործարկում նրա SMTP կոնստրուկտորը։ Հաջող SOCKS միացումը տալիս է հոսք, ոչ թե սկզբնավորված փոստային սեսիա։
Սովորական SMTP-ի համար, ներառյալ ավելի ուշ STARTTLS թարմացումը, սերվերն առաջինն է խոսում.
SOCKS: connection to smtp.example.net:587 succeeds
server: 220 smtp.example.net ready
client: EHLO client.example.net
server: 250-smtp.example.net
server: 250-STARTTLS
server: 250 AUTH ...Սա սխեմատիկ է. հայտարարված ընդլայնումները տարբերվում են։ Ողջույնն ինքը կարող է ձգվել մի քանի տողով. պատասխանի կոդին հաջորդող գծիկը շարունակում է պատասխանը, իսկ վերջին տողը այն ավարտում է։ Սպառեք ամբողջ ողջույնը EHLO-ից առաջ։ Հակառակ դեպքում հաճախորդը կարող է կարդալ հին 220, երբ սպասում է EHLO-ի 250-ին, և առողջ միացման վրա դուրս գա ռիթմից։
Անուղղակի TLS-ն այլ կարգ ունի. SOCKS միացում, TLS ձեռքսեղմում, ապա SMTP ողջույն TLS-ի ներսում։ STARTTLS-ը սկսվում է ընթեռնելի ողջույնով և EHLO-ով, թարմացնում է հոսքը և դրանից հետո նորից ստանում հնարավորությունները։
Հանրային կոնստրուկտորը սովորաբար զբաղվում է սոքեթի կարգավորմամբ, պահված միացման պարամետրերով և ողջույնի տեղեկությամբ, սկզբնական պատասխանով և EHLO-ով՝ HELO պահուստով, որտեղ տեղին է.
use Net::SMTP;
my $smtp = Net::SMTP->new(
'smtp.example.net',
Port => 587,
Hello => 'client.example.net',
Timeout => 30,
) or die "SMTP connection failed: $@";
$smtp->starttls()
or die "STARTTLS failed: " . $smtp->message;Այս հանրային օրինակն օգտագործում է STARTTLS և չի կարգավորում SOCKS։ Սերվերի անունն ընտրում է փոստային նպատակակետը. Hello-ը տալիս է հաճախորդի SMTP ինքնությունը։ Անուղղակի TLS-ի համար օգտագործեք փաստաթղթավորված SSL կոնստրուկտորի ընտրանքը և ծառայության պորտը։
SendHello => 0-ը ճնշում է ավտոմատ EHLO/HELO-ն, ոչ ողջույնի ընթերցումը կամ տրանսպորտի կառուցումը։ Տողերի ընթերցիչ կանչելը, ապա hello()-ը ևս սկզբնավորման փաստաթղթավորված փոխարինում չէ. Net::Cmd-ը իր ցածր մակարդակի պատասխանների ընթերցիչները դասակարգում է որպես պաշտպանված ենթադասի մեթոդներ։
Եթե SOCKS-ը պարտադիր է, ընտրեք աջակցվող SOCKS ինտերֆեյսով հաճախորդ կամ պահպանեք ինտեգրումը կոնկրետ Net::SMTP տարբերակի հետ։ Օգտագործեք վերը նշված հաջորդականությունը որպես դրա պայմանագիր՝ մասնավոր դաշտերը պատճենելու փոխարեն։ Առանձին TCP ադապտերն էլ պահանջում է գիտակցված TLS ինքնության կառավարում. վկայականը պետք է նույնականացնի իրական փոստային ծառայությունը, իսկ պրոքսիի հավատարմագրերը մնում են առանձին SMTP մուտքից։