Net::SMTP 3.16 ei dokumenteeri SOCKS-i ega eelühendatud pesa konstruktori parameetrit. Failideskriptori mähkimine päritud new_from_fd-ga ei käivita selle SMTP-konstruktorit. Õnnestunud SOCKS-ühendus annab voo, mitte initsialiseeritud postiseansi.

Lihtsa SMTP-i puhul, sealhulgas hilisema STARTTLS-i uuenduse korral, räägib server esimesena:

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 ...

See on skemaatiline; teatatud laiendused erinevad. Tervitus võib ise hõlmata mitut rida: vastusekood, millele järgneb sidekriips, jätkab vastust, samas kui selle viimane rida lõpetab selle. Enne EHLO-d tarbige kogu tervitus. Vastasel juhul võib klient lugeda vana 220, kui ta ootab EHLO 250-t, ja tervel ühendusel rütmist välja minna.

Implitsiitsel TLS-il on teine järjekord: SOCKS-ühendus, TLS-kätlus, seejärel SMTP-tervitus TLS-i sees. STARTTLS algab loetava tervituse ja EHLO-ga, uuendab voogu ja hangib seejärel uuesti võimalused.

Avalik konstruktor käsitleb tavaliselt pesa konfiguratsiooni, salvestatud ühenduse parameetreid ja tervitusteavet, esialgset vastust ning EHLO-d koos HELO varuvariandiga, kus asjakohane:

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;

See avalik näide kasutab STARTTLS-i ega seadista SOCKS-i. Serveri nimi valib postisihtkoha; Hello annab kliendi SMTP identiteedi. Implitsiitse TLS-i jaoks kasutage dokumenteeritud konstruktori valikut SSL ja teenuse porti.

SendHello => 0 summutab automaatse EHLO/HELO, mitte tervituse lugemise ega transpordi ehitamise. Ka reaLugeja kutsumine ja seejärel hello() ei ole dokumenteeritud initsialiseerimise asendus: Net::Cmd liigitab oma madala taseme vastuselugejad kaitstud alamklassi meetoditeks.

Kui SOCKS on kohustuslik, valige toetatud SOCKS-liidesega klient või hoidke integreerimist konkreetse Net::SMTP versiooni vastu. Kasutage ülaltoodud järjekorda selle lepinguna, mitte ärge kopeerige privaatvälju. Eraldi TCP-adapter nõuab samuti teadlikku TLS-identiteedi käsitlemist: sertifikaat peab tuvastama tegeliku postiteenuse ja proksimandaadid jäävad SMTP-sisselogimisest eraldi.

Seotud artiklid