Net::SMTP 3.16 no documenta cap paràmetre de constructor SOCKS ni de sòcol preconnectat. Embarcar un descriptor de fitxer amb l'new_from_fd heretat no executa el seu constructor SMTP. Una connexió SOCKS correcta proporciona un flux, no una sessió de correu inicialitzada.

Per a SMTP pla, incloent-hi una actualització STARTTLS posterior, el servidor parla primer:

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

Això és esquemàtic; les extensions anunciades varien. La salutació pot ocupar diverses línies: un codi de resposta seguit d'un guió continua la resposta, mentre que la línia final la tanca. Consumiu tota la salutació abans de l'EHLO. Si no, el client pot llegir un 220 antic quan espera el 250 de l'EHLO i perdre el compàs en una connexió sana.

El TLS implícit té un altre ordre: connexió SOCKS, handshake TLS i després salutació SMTP dins del TLS. L'STARTTLS comença amb la salutació llegible i l'EHLO, actualitza el flux i obté les capacitats de nou després.

El constructor públic normalment gestiona la configuració del sòcol, els paràmetres de connexió desats i la informació de salutació, la resposta inicial i l'EHLO amb retrocés a HELO quan escau:

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;

Aquest exemple públic utilitza STARTTLS i no configura SOCKS. El nom del servidor selecciona la destinació de correu; Hello proporciona la identitat SMTP del client. Per a TLS implícit, feu servir l'opció de constructor SSL documentada i el port del servei.

SendHello => 0 suprimeix l'EHLO/HELO automàtic, no la lectura de la salutació ni la construcció del transport. Cridar un lector de línies i després hello() tampoc no és un substitut documentat de la inicialització: Net::Cmd classifica els seus lectors de resposta de baix nivell com a mètodes protegits de subclasse.

Si SOCKS és obligatori, trieu un client amb una interfície SOCKS admesa o manteniu una integració contra la versió concreta de Net::SMTP. Feu servir la seqüència anterior com a contracte en lloc de copiar camps privats. Un adaptador TCP separat també necessita un tractament deliberat de la identitat TLS: el certificat ha d'identificar el servei de correu real, i les credencials del proxy romanen separades de l'inici de sessió SMTP.

Articles relacionats