Net::SMTP 3.16 dokumenterer ikkje ein SOCKS- eller førehandstilkopla socket-konstruktørparameter. Å pakka ein filskildring inn med den arva new_from_fd køyrer ikkje SMTP-konstruktøren hans. Ei vellukka SOCKS-tilkopling gjev ein straum, ikkje ei initialisert e-postøkt.

For vanleg SMTP, òg ein seinare STARTTLS-oppgradering, snakkar tenaren først:

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

Dette er skjematisk; annonserte utvidingar varierer. Helinga kan sjølv strekkja seg over fleire linjer: ein svarkode etterfylgd av ein bindestrek held svaret fram, medan den siste linja avsluttar det. Bruk opp heile helsinga før EHLO. Elles kan klienten lesa ein gammal 220 når han ventar 250 frå EHLO og koma ut av takt på ei sunn tilkopling.

Implisitt TLS har ei anna rekkjefølgje: SOCKS-tilkopling, TLS-handtrykk, deretter SMTP-helsing inne i TLS. STARTTLS byrjar med den leselege helsinga og EHLO, oppgraderer straumen og hentar deretter funksjonar på nytt.

Den offentlege konstruktøren handsamar vanlegvis socket-konfigurasjon, lagra tilkoplingparametrar og helsinginformasjon, den første responsen og EHLO med HELO-fallback der det passar:

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;

Dette offentlege dømet brukar STARTTLS og konfigurerer ikkje SOCKS. Tenarnamnet vel e-postmålet; Hello gjev SMTP-identiteten til klienten. For implisitt TLS, bruk det dokumenterte konstruktørvalet SSL og porten til tenesta.

SendHello => 0 undertrykkjer automatisk EHLO/HELO, ikkje lesing av helsinga eller bygging av transporten. Å kalla ein linjelesar og deretter hello() er heller ikkje ei dokumentert erstatning for initialisering: Net::Cmd klassifiserer lavnivå-svarlesarane sine som verna underklassemetodar.

Viss SOCKS er obligatorisk, vel ein klient med eit støtta SOCKS-grensesnitt eller hald ved like ein integrasjon mot den spesifikke Net::SMTP-versjonen. Bruk rekkjefølgja ovanfor som kontrakten i staden for å kopiera private felt. Ein separat TCP-adapter treng òg medviten handsaming av TLS-identitet: sertifikatet må identifisera den verkelege e-posttenesta, og proxy-innloggingsdetaljar held seg skilde frå SMTP-innlogging.

Relaterte artiklar