Net::SMTP 3.16 nemá konštruktor s predpripojeným SOCKS
Net::SMTP 3.16 nedokumentuje voľbu konštruktora pre predpripojený socket. Pri voľbe proxy transportnej integrácie zachovajte pozdrav SMTP, EHLO aj poradie TLS.
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.