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 մուտքից։

Առնչվող հոդվածներ