Net::SMTP 3.16 nav iepriekš savienota SOCKS konstruktora
Net::SMTP 3.16 nedokumentē konstruktora opciju iepriekš savienotai ligzdai. Izvēloties starpniekservera transporta integrāciju, saglabājiet SMTP sveicienu, EHLO un TLS secību.
Net::SMTP 3.16 nedokumentē SOCKS vai iepriekš savienotas ligzdas konstruktora parametru. Faila deskriptora ietīšana mantotajā new_from_fd neizpilda tā SMTP konstruktoru. Veiksmīgs SOCKS savienojums nodrošina straumi, nevis inicializētu pasta sesiju.
Vienkāršam SMTP, tostarp vēlākai STARTTLS jaunināšanai, serveris runā pirmais:
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 ...Šis ir shematisks; izziņotie paplašinājumi atšķiras. Pats sveiciens var aptvert vairākas rindas: atbildes kods, kam seko domuzīme, turpina atbildi, bet tās pēdējā rinda to pabeidz. Pirms EHLO patērējiet visu sveicienu. Citādi klients var nolasīt vecu 220, kamēr gaida EHLO 250, un izkrist no ritma veselīgā savienojumā.
Netiešajam TLS ir cita secība: SOCKS savienojums, TLS rokasspiediens, pēc tam SMTP sveiciens TLS iekšienē. STARTTLS sākas ar lasāmo sveicienu un EHLO, jaunina straumi un pēc tam atkal iegūst iespējas.
Publiskais konstruktors parasti apstrādā ligzdas konfigurāciju, saglabātos savienojuma parametrus un sveiciena informāciju, sākotnējo atbildi un EHLO ar HELO rezerves variantu, kur tas ir piemērots:
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 publiskais piemērs izmanto STARTTLS un nekonfigurē SOCKS. Servera nosaukums izvēlas pasta galamērķi; Hello nodrošina klienta SMTP identitāti. Netiešajam TLS izmantojiet dokumentēto SSL konstruktora opciju un pakalpojuma portu.
SendHello => 0 nomāc automātisko EHLO/HELO, nevis sveiciena lasīšanu vai transporta būvēšanu. Arī rindu lasītāja izsaukšana un pēc tam hello() nav dokumentēts inicializācijas aizstājējs: Net::Cmd klasificē savus zemā līmeņa atbilžu lasītājus kā aizsargātas apakšklases metodes.
Ja SOCKS ir obligāts, izvēlieties klientu ar atbalstītu SOCKS saskarni vai uzturiet integrāciju pret konkrēto Net::SMTP versiju. Izmantojiet iepriekš minēto secību kā tās līgumu, nevis kopējiet privātos laukus. Atsevišķam TCP adapterim arī nepieciešama apzināta TLS identitātes apstrāde: sertifikātam jāidentificē īstais pasta pakalpojums, un starpniekservera akreditācijas dati paliek atsevišķi no SMTP pieteikšanās.