Net::SMTP 3.16 nedokumentuje parameter konštruktora pre SOCKS ani predpripojený socket. Zbalenie deskriptora súboru zdedeným new_from_fd nespustí jeho SMTP konštruktor. Úspešné SOCKS pripojenie poskytuje prúd, nie inicializovanú poštovú reláciu.

Pre obyčajný SMTP, vrátane neskoršieho upgradu STARTTLS, hovorí prvý server:

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

Toto je schematické; inzerované rozšírenia sa líšia. Pozdrav sám môže zahŕňať viac riadkov: kód odpovede nasledovaný pomlčkou odpoveď predlžuje, záverečný riadok ju ukončuje. Pred EHLO spotrebujte celý pozdrav. Inak klient môže prečítať staré 220, keď očakáva 250 od EHLO, a na zdravom spojení vypadnúť zo sledu.

Implicitný TLS má iné poradie: SOCKS pripojenie, TLS handshake, potom pozdrav SMTP vnútri TLS. STARTTLS začína čitateľným pozdravom a EHLO, upgraduje prúd a potom znova získa schopnosti.

Verejný konštruktor zvyčajne obsluhuje konfiguráciu socketu, uložené parametre pripojenia a informácie o pozdrave, úvodnú odpoveď a EHLO s náhradou HELO, kde je to vhodné:

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;

Tento verejný príklad používa STARTTLS a nenastavuje SOCKS. Názov servera vyberá poštový cieľ; Hello dodáva identitu klienta SMTP. Pre implicitný TLS použite dokumentovanú voľbu konštruktora SSL a port služby.

SendHello => 0 potláča automatické EHLO/HELO, nie čítanie pozdravu ani stavbu transportu. Volanie čítačky riadkov a potom hello() tiež nie je dokumentovanou náhradou inicializácie: Net::Cmd klasifikuje svoje nízkoúrovňové čítačky odpovedí ako chránené metódy podtriedy.

Ak je SOCKS povinný, vyberte klienta s podporovaným rozhraním SOCKS alebo udržiavajte integráciu pre konkrétnu verziu Net::SMTP. Použite uvedené poradie ako jej kontrakt namiesto kopírovania súkromných polí. Samostatný TCP adaptér tiež vyžaduje zámerné zaobchádzanie s identitou TLS: certifikát musí identifikovať skutočnú poštovú službu a proxy prihlasovacie údaje zostávajú oddelené od prihlásenia SMTP.

Súvisiace články