Net::SMTP 3.16 documenteert geen SOCKS- of vooraf verbonden socket-constructorparameter. Een bestandsdescriptor inpakken met de geërfde new_from_fd voert de SMTP-constructor ervan niet uit. Een geslaagde SOCKS-verbinding levert een stream, geen geïnitialiseerde mailsessie.

Voor gewone SMTP, inclusief een latere STARTTLS-upgrade, spreekt de server eerst:

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 schematisch; aangekondigde extensies verschillen. De groet kan zelf meerdere regels beslaan: een antwoordcode gevolgd door een koppelteken vervolgt het antwoord, terwijl de laatste regel het beëindigt. Verbruik de hele groet vóór EHLO. Anders kan de client een oude 220 lezen terwijl hij de 250 van EHLO verwacht en uit de maat raken op een gezonde verbinding.

Impliciete TLS heeft een andere volgorde: SOCKS-verbinding, TLS-handshake, dan SMTP-groet binnen TLS. STARTTLS begint met de leesbare groet en EHLO, waardeert de stream op en verkrijgt daarna opnieuw mogelijkheden.

De openbare constructor behandelt gewoonlijk de socketconfiguratie, opgeslagen verbindingsparameters en groetinformatie, het eerste antwoord en EHLO met HELO-terugval waar 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 openbare voorbeeld gebruikt STARTTLS en configureert geen SOCKS. De servernaam selecteert de mailbestemming; Hello levert de SMTP-identiteit van de client. Voor impliciete TLS gebruikt u de gedocumenteerde SSL-constructoroptie en de poort van de dienst.

SendHello => 0 onderdrukt automatische EHLO/HELO, niet het lezen van de groet of het bouwen van het transport. Een regellezer aanroepen en dan hello() is ook geen gedocumenteerde vervanging voor initialisatie: Net::Cmd classificeert zijn laag-niveau antwoordlezers als beschermde subklassemethoden.

Als SOCKS verplicht is, kies een client met een ondersteunde SOCKS-interface of onderhoud een integratie tegen de specifieke Net::SMTP-versie. Gebruik de bovenstaande volgorde als contract in plaats van privévelden te kopiëren. Een aparte TCP-adapter vereist ook bewuste TLS-identiteitsafhandeling: het certificaat moet de echte maildienst identificeren, en proxy-inloggegevens blijven gescheiden van SMTP-login.

Gerelateerde artikelen