Net::SMTP 3.16 nu documentează niciun parametru de constructor SOCKS sau pentru socket preconectat. Înfășurarea unui descriptor de fișier cu new_from_fd moștenit nu îi execută constructorul SMTP. O conexiune SOCKS reușită oferă un flux, nu o sesiune de poștă inițializată.

Pentru SMTP simplu, inclusiv o actualizare STARTTLS ulterioară, serverul vorbește primul:

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

Aceasta este schematic; extensiile anunțate variază. Salutul în sine poate acoperi mai multe linii: un cod de răspuns urmat de o cratimă continuă răspunsul, în timp ce linia sa finală îl încheie. Consumați întregul salut înainte de EHLO. Altfel clientul poate citi un 220 vechi când așteaptă 250 de la EHLO și poate ieși din ritm pe o conexiune sănătoasă.

TLS implicit are altă ordine: conexiune SOCKS, handshake TLS, apoi salut SMTP în interiorul TLS. STARTTLS începe cu salutul lizibil și EHLO, actualizează fluxul și obține din nou capacitățile după aceea.

Constructorul public gestionează de obicei configurația socketului, parametrii de conexiune salvați și informațiile de salut, răspunsul inițial și EHLO cu revenire la HELO unde este cazul:

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;

Acest exemplu public folosește STARTTLS și nu configurează SOCKS. Numele serverului selectează destinația poștei; Hello oferă identitatea SMTP a clientului. Pentru TLS implicit, folosiți opțiunea de constructor SSL documentată și portul serviciului.

SendHello => 0 suprimă EHLO/HELO automat, nu citirea salutului sau construirea transportului. Apelarea unui cititor de linii și apoi hello() nu este nici ea un substitut documentat al inițializării: Net::Cmd își clasifică cititoarele de răspuns de nivel jos drept metode protejate de subclasă.

Dacă SOCKS este obligatoriu, alegeți un client cu interfață SOCKS acceptată sau mențineți o integrare pentru versiunea specifică de Net::SMTP. Folosiți secvența de mai sus ca și contract al ei în loc să copiați câmpuri private. Un adaptor TCP separat are nevoie și de o tratare deliberată a identității TLS: certificatul trebuie să identifice serviciul de poștă real, iar acreditările proxy rămân separate de autentificarea SMTP.

Articole similare