Net::SMTP 3.16 ne dokumentas parametron de konstruilo por SOCKS aŭ antaŭkonektita ingo. Ĉirkaŭvolvi dosierpriskribilon per la heredita new_from_fd ne funkciigas ĝian SMTP-konstruilon. Sukcesa SOCKS-konekto liveras fluon, ne pravigitan retpoŝtan seancon.

Por ordinara SMTP, inkluzive postan STARTTLS-plibonigon, la servilo parolas unue:

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

Ĉi tio estas skema; anoncitaj etendaĵoj varias. La saluto mem povas etendiĝi trans plurajn liniojn: respondkodo sekvata de hufumo daŭrigas la respondon, dum ĝia lasta linio finas ĝin. Konsumu la tutan saluton antaŭ EHLO. Alie la kliento povas legi malnovan 220 dum ĝi atendas la 250 de EHLO kaj eliri el paŝo sur sana konekto.

Implica TLS havas alian ordon: SOCKS-konekto, TLS-manpremo, poste SMTP-saluto ene de TLS. STARTTLS komenciĝas per la legebla saluto kaj EHLO, plibonigas la fluon kaj poste denove akiras kapablojn.

La publika konstruilo kutime traktas ingan agordon, konservitajn konektajn parametrojn kaj salutinformojn, la unuan respondon kaj EHLO kun HELO-rezervo kie konvene:

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;

Ĉi tiu publika ekzemplo uzas STARTTLS kaj ne agordas SOCKS. La servila nomo elektas la retpoŝtan celon; Hello liveras la SMTP-identecon de la kliento. Por implica TLS, uzu la dokumentitan konstruilan opcion SSL kaj la havenon de la servo.

SendHello => 0 subpremas aŭtomatan EHLO/HELO, ne la legadon de la saluto aŭ la konstruadon de la transporto. Ankaŭ voki linilegilon kaj poste hello() ne estas dokumentita anstataŭaĵo por pravigado: Net::Cmd klasifikas siajn malaltnivelajn respondlegilojn kiel protektitajn subklasajn metodojn.

Se SOCKS estas deviga, elektu klienton kun subtenata SOCKS-interfaco aŭ prizorgu integriĝon kontraŭ la specifa Net::SMTP-versio. Uzu la supran sekvencon kiel ĝian kontrakton anstataŭ kopii privatajn kampojn. Aparta TCP-adaptilo ankaŭ bezonas konscian TLS-identecon: la atestilo devas identigi la realan retpoŝtan servon, kaj prokuraj akreditaĵoj restas apartaj de la SMTP-ensaluto.

Rilataj artikoloj