Net::SMTP 3.16 ne dokumentira parametra konstruktorja za SOCKS ali vnaprej povezano vtičnico. Ovijanje opisnika datoteke s podedovanim new_from_fd ne zažene njegovega konstruktorja SMTP. Uspešna povezava SOCKS zagotovi tok, ne inicializirane poštne seje.

Za navaden SMTP, vključno s poznejšo nadgradnjo STARTTLS, spregovori strežnik prvi:

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

To je shematično; napovedane razširitve se razlikujejo. Sam pozdrav lahko obsega več vrstic: kodi odgovora, ki mu sledi vezaj, odgovor nadaljuje, zadnja vrstica pa ga zaključi. Pred EHLO porabite celoten pozdrav. Sicer lahko odjemalec prebere star 220, ko pričakuje 250 od EHLO, in na zdravem povezavi izgubi ritem.

Implicitni TLS ima drugačen vrstni red: povezava SOCKS, rokovanje TLS, nato pozdrav SMTP znotraj TLS. STARTTLS se začne z berljivim pozdravom in EHLO, nadgradi tok in nato znova pridobi zmogljivosti.

Javni konstruktor običajno obravnava konfiguracijo vtičnice, shranjene parametre povezave in podatke o pozdravu, začetni odgovor in EHLO z rezervnim HELO, kjer je primerno:

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;

Ta javni primer uporablja STARTTLS in ne nastavi SOCKS. Ime strežnika izbere poštni cilj; Hello zagotovi identiteto odjemalca SMTP. Za implicitni TLS uporabite dokumentirano možnost konstruktorja SSL in vrata storitve.

SendHello => 0 zatira samodejni EHLO/HELO, ne branja pozdrava ali gradnje prenosa. Tudi klic bralnika vrstic in nato hello() ni dokumentirano nadomestilo za inicializacijo: Net::Cmd svoje nizkonivojske bralnike odgovorov razvršča med zaščitene metode podrazreda.

Če je SOCKS obvezen, izberite odjemalca s podprtim vmesnikom SOCKS ali vzdržujte integracijo za določeno različico Net::SMTP. Uporabite zgornje zaporedje kot njeno pogodbo, namesto da kopirate zasebna polja. Ločen adapter TCP potrebuje tudi premišljeno ravnanje z identiteto TLS: potrdilo mora identificirati pravo poštno storitev, proxy poverilnice pa ostanejo ločene od prijave SMTP.

Sorodni članki