Net::SMTP 3.16 nedokumentuoja SOCKS ar iš anksto prijungto lizdo konstruktoriaus parametro. Bylos deskriptoriaus apvyniojimas paveldėtu new_from_fd neįvykdo jo SMTP konstruktoriaus. Sėkmingas SOCKS ryšys suteikia srautą, o ne inicializuotą pašto sesiją.

Paprastam SMTP, įskaitant vėlesnį STARTTLS atnaujinimą, serveris kalba pirmas:

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

Tai schematiška; skelbiami plėtiniai skiriasi. Pats pasveikinimas gali apimti kelias eilutes: atsakymo kodas, po kurio eina brūkšnelis, tęsia atsakymą, o paskutinė eilutė jį užbaigia. Prieš EHLO suvartokite visą pasveikinimą. Priešingu atveju klientas gali perskaityti seną 220, kai laukia EHLO 250, ir iškristi iš ritmo sveikame ryšyje.

Implicitiniam TLS būdinga kita tvarka: SOCKS ryšys, TLS rankos paspaudimas, tada SMTP pasveikinimas TLS viduje. STARTTLS prasideda skaitomu pasveikinimu ir EHLO, atnaujina srautą ir po to vėl gauna galimybes.

Viešasis konstruktorius paprastai tvarko lizdo konfigūraciją, išsaugotus ryšio parametrus ir pasveikinimo informaciją, pradinį atsakymą ir EHLO su HELO atsarginiu variantu, kur tinka:

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;

Šis viešas pavyzdys naudoja STARTTLS ir nekonfigūruoja SOCKS. Serverio vardas parenka pašto paskirties vietą; Hello suteikia kliento SMTP tapatybę. Implicitiniam TLS naudokite dokumentuotą SSL konstruktoriaus parinktį ir paslaugos portą.

SendHello => 0 slopina automatinį EHLO/HELO, o ne pasveikinimo skaitymą ar transporto kūrimą. Eilučių skaitytuvo iškvietimas ir tada hello() taip pat nėra dokumentuotas inicijavimo pakaitalas: Net::Cmd savo žemo lygio atsakymų skaitytuvus priskiria apsaugotiems poklasio metodams.

Jei SOCKS yra privalomas, rinkitės klientą su palaikoma SOCKS sąsaja arba palaikykite integraciją su konkrečia Net::SMTP versija. Naudokite aukščiau pateiktą seką kaip jos sutartį, o ne kopijuokite privačius laukus. Atskiras TCP adapteris taip pat reikalauja sąmoningo TLS tapatybės tvarkymo: sertifikatas turi identifikuoti tikrąją pašto paslaugą, o proxy kredencialai lieka atskirti nuo SMTP prisijungimo.

Susiję straipsniai