Net::SMTP 3.16 har ingen forudforbundet SOCKS-konstruktør
Net::SMTP 3.16 dokumenterer ingen konstruktørvalgmulighed for en forudforbundet socket. Bevar SMTP-hilsenen, EHLO og TLS-rækkefølgen, når du vælger en proxy-transportintegration.
Net::SMTP 3.16 dokumenterer ikke en SOCKS- eller forudforbundet socket-konstruktørparameter. Indpakning af en filbeskrivelse med den nedarvede new_from_fd kører ikke dens SMTP-konstruktør. En vellykket SOCKS-forbindelse leverer en strøm, ikke en initialiseret mailsession.
For almindelig SMTP, inklusive en senere STARTTLS-opgradering, taler serveren 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 skematisk; annoncerede udvidelser varierer. Hilsenen kan selv strække sig over flere linjer: en svarkode efterfulgt af en bindestreg fortsætter svaret, mens dens sidste linje afslutter det. Forbrug hele hilsenen før EHLO. Ellers kan klienten læse et gammelt 220, når den forventer EHLO's 250, og komme ud af trit på en sund forbindelse.
Implicit TLS har en anden rækkefølge: SOCKS-forbindelse, TLS-håndtryk, derefter SMTP-hilsen inde i TLS. STARTTLS begynder med den læsbare hilsen og EHLO, opgraderer strømmen og henter igen funktioner bagefter.
Den offentlige konstruktør håndterer normalt socket-konfiguration, gemte forbindelsesparametre og hilseninformation, det første svar og EHLO med HELO-fallback, hvor det er passende:
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 offentlige eksempel bruger STARTTLS og konfigurerer ikke SOCKS. Servernavnet vælger maildestinationen; Hello leverer klientens SMTP-identitet. Til implicit TLS skal du bruge den dokumenterede konstruktørvalgmulighed SSL og tjenestens port.
SendHello => 0 undertrykker automatisk EHLO/HELO, ikke læsningen af hilsenen eller opbygningen af transporten. At kalde en linjelæser og derefter hello() er heller ikke en dokumenteret erstatning for initialisering: Net::Cmd klassificerer sine lavniveau-svarlæsere som beskyttede underklassemetoder.
Hvis SOCKS er obligatorisk, vælg en klient med en understøttet SOCKS-grænseflade, eller vedligehold en integration mod den specifikke Net::SMTP-version. Brug rækkefølgen ovenfor som dens kontrakt i stedet for at kopiere private felter. En separat TCP-adapter kræver også bevidst håndtering af TLS-identitet: certifikatet skal identificere den rigtige mailtjeneste, og proxy-legitimationsoplysninger forbliver adskilt fra SMTP-login.