Net::SMTP 3.16 hat gjin foarôf ferbûne SOCKS-konstruktor
Net::SMTP 3.16 dokumintearret gjin konstruktoropsje foar in foarôf ferbûne socket. Hâld de SMTP-groetnis, EHLO en TLS-folchoarder yntakt by it kiezen fan in proxy-transportyntegraasje.
Net::SMTP 3.16 dokumintearret gjin SOCKS- of foarôf ferbûne socket-konstruktorparameter. It ynpakken fan in triemdeskriptor mei de erve new_from_fd fiert syn SMTP-konstruktor net út. In slagge SOCKS-ferbining leveret in stream, net in initialisearre mailsesje.
Foar gewoane SMTP, ynklusyf in lettere STARTTLS-opwurdearring, praat de tsjinner earst:
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 ...Dit is skematysk; oankundige útwreidings ferskille. De groetnis kin sels oer ferskate rigels rinne: in antwurdkoade folge troch in keppelstreekje ferlingt it antwurd, wylst de lêste rigel it beëiniget. Konsumearje de hiele groetnis foar EHLO. Oars kin de klant in âld 220 lêze wylst er de 250 fan EHLO ferwachtet en út 'e maat reitsje op in sûne ferbining.
Ymplisite TLS hat in oare folchoarder: SOCKS-ferbining, TLS-hânskrift, dan SMTP-groetnis binnen TLS. STARTTLS begjint mei de lêsbere groetnis en EHLO, wurdearret de stream op en hellet dêrnei wer mooglikheden.
De iepenbiere konstruktor behannelet normaal de socketkonfiguraasje, bewarre ferbiningsparameters en groetnisynformaasje, it earste antwurd en EHLO mei HELO-fallback wêr't passend:
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;Dit iepenbiere foarbyld brûkt STARTTLS en konfigurearret gjin SOCKS. De tsjinnernamme selektearret de mailbestimming; Hello leveret de SMTP-identiteit fan 'e klant. Foar ymplisite TLS, brûk de dokumintearre SSL-konstruktoropsje en de poarte fan 'e tsjinst.
SendHello => 0 ûnderdrukt automatyske EHLO/HELO, net it lêzen fan 'e groetnis of de bou fan it transport. It oanroppen fan in rigellêzer en dan hello() is ek gjin dokumintearre ferfanging foar initialisaasje: Net::Cmd klassifisearret syn leech-nivo antwurdlezers as beskerme subklassemetoaden.
As SOCKS ferplicht is, kies in klant mei in stipe SOCKS-ynterface of ûnderhâld in yntegraasje tsjin de spesifike Net::SMTP-ferzje. Brûk de folchoarder hjirboppe as har kontrakt ynstee fan partikuliere fjilden te kopiearjen. In aparte TCP-adapter fereasket ek bewuste TLS-identiteitsbehanneling: it sertifikaat moat de echte mailtsjinst identifisearje, en proxy-ynloggegevens bliuwe apart fan SMTP-ynloggen.