Net::SMTP 3.16 nemá konstruktor pro předpřipojený SOCKS
Net::SMTP 3.16 nedokumentuje volbu konstruktoru pro předpřipojený socket. Při volbě proxy transportní integrace zachovejte pozdrav SMTP, EHLO i pořadí TLS.
Net::SMTP 3.16 nedokumentuje parametr konstruktoru pro SOCKS ani předpřipojený socket. Obalení deskriptoru souboru zděděným new_from_fd nespustí jeho SMTP konstruktor. Úspěšné SOCKS připojení poskytuje proud, nikoli inicializovanou poštovní relaci.
U prostého SMTP, včetně pozdějšího upgradu STARTTLS, mluví první 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šíření se liší. Pozdrav sám může zahrnovat více řádků: kód odpovědi následovaný pomlčkou odpověď prodlužuje, závěrečný řádek ji ukončuje. Před EHLO spotřebujte celý pozdrav. Jinak klient může přečíst staré 220, když očekává 250 od EHLO, a na zdravém spojení vypadnout ze sledu.
Implicitní TLS má jiné pořadí: SOCKS připojení, TLS handshake, poté pozdrav SMTP uvnitř TLS. STARTTLS začíná čitelným pozdravem a EHLO, upgradeuje proud a poté znovu získá schopnosti.
Veřejný konstruktor obvykle obsluhuje konfiguraci socketu, uložené parametry připojení a informace o pozdravu, úvodní odpověď 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 veřejný příklad používá STARTTLS a nenastavuje SOCKS. Název serveru volí poštovní cíl; Hello dodává identitu klienta SMTP. Pro implicitní TLS použijte dokumentovanou volbu konstruktoru SSL a port služby.
SendHello => 0 potlačuje automatické EHLO/HELO, ne čtení pozdravu ani stavbu transportu. Volat čtečku řádků a poté hello() také není dokumentovanou náhradou inicializace: Net::Cmd klasifikuje své nízkoúrovňové čtečky odpovědí jako chráněné metody podtřídy.
Je-li SOCKS povinný, zvolte klienta s podporovaným rozhraním SOCKS nebo udržujte integraci proti konkrétní verzi Net::SMTP. Použijte výše uvedené pořadí jako její kontrakt místo kopírování soukromých polí. Samostatný TCP adaptér také vyžaduje záměrné zacházení s identitou TLS: certifikát musí identifikovat skutečnou poštovní službu a proxy přihlašovací údaje zůstávají oddělené od přihlášení SMTP.