Net::SMTP 3.16 het geen voorafgekoppelde SOCKS-konstruktor nie
Net::SMTP 3.16 het geen gedokumenteerde konstruktoropsie vir 'n voorafgekoppelde sok nie. Hou die SMTP-groet, EHLO en TLS-volgorde ongeskonde wanneer jy 'n proxy-transportintegrasie kies.
Net::SMTP 3.16 dokumenteer nie 'n SOCKS- of voorafgekoppelde-sok-konstruktorparameter nie. Om 'n lêerbeskrywer met die geërfde new_from_fd te omhul, voer nie sy SMTP-konstruktor uit nie. 'n Suksesvolle SOCKS-verbinding lewer 'n stroom, nie 'n geïnisialiseerde posessie nie.
Vir gewone SMTP, insluitend 'n latere STARTTLS-opgradering, praat die bediener eerste:
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 skematies; geadverteerde uitbreidings wissel. Die groet kan self oor verskeie reëls strek: 'n antwoordkode gevolg deur 'n koppelteken verleng die antwoord, terwyl die finale reël dit beëindig. Verbruik die hele groet voor EHLO. Anders kan die kliënt 'n ou 220 lees wanneer hy EHLO se 250 verwag en uit pas raak op 'n gesonde verbinding.
Implisiete TLS het 'n ander volgorde: SOCKS-verbinding, TLS-handdruk, dan SMTP-groet binne TLS. STARTTLS begin met die leesbare groet en EHLO, gradeer die stroom op en verkry daarna weer vermoëns.
Die publieke konstruktor hanteer gewoonlik sokkonfigurasie, gestoorde verbindingsparameters en groetinligting, die aanvanklike antwoord en EHLO met HELO-terugval waar gepas:
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;Hierdie publieke voorbeeld gebruik STARTTLS en konfigureer nie SOCKS nie. Die bedienernaam kies die posbestemming; Hello verskaf die kliënt se SMTP-identiteit. Vir implisiete TLS, gebruik die gedokumenteerde SSL-konstruktoropsie en die diens se poort.
SendHello => 0 onderdruk outomatiese EHLO/HELO, nie die lees van die groet of die bou van die transport nie. Om 'n reëlleesder te roep en dan hello() is ook nie 'n gedokumenteerde vervanging vir inisialisering nie: Net::Cmd klassifiseer sy laevlak-antwoordlesers as beskermde subklasmetodes.
As SOCKS verpligtend is, kies 'n kliënt met 'n ondersteunde SOCKS-koppelvlak of onderhou 'n integrasie teen die spesifieke Net::SMTP-weergawe. Gebruik die bostaande volgorde as sy kontrak eerder as om private velde te kopieer. 'n Aparte TCP-adapter benodig ook doelbewuste TLS-identiteitshantering: die sertifikaat moet die werklike posdiens identifiseer, en proxy-referensies bly apart van SMTP-aanmelding.