Net::SMTP 3.16 ei dokumentoi SOCKS- tai esikytketyn pistokkeen konstruktoriparametria. Tiedostokuvaajan kääriminen perityllä new_from_fd:lla ei suorita sen SMTP-konstruktoria. Onnistunut SOCKS-yhteys tarjoaa virran, ei alustettua posti-istuntoa.

Tavallisessa SMTP:ssä, mukaan lukien myöhempi STARTTLS-päivitys, palvelin puhuu ensin:

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

Tämä on kaavamainen; ilmoitetut laajennukset vaihtelevat. Tervehdys voi itsessään ulottua usealle riville: vastauskoodi, jota seuraa yhdysmerkki, jatkaa vastausta, kun taas sen viimeinen rivi päättää sen. Kuluta koko tervehdys ennen EHLO:ta. Muuten asiakas voi lukea vanhan 220:n odottaessaan EHLO:n 250:tä ja pudota tahdista terveellä yhteydellä.

Implisiittisellä TLS:llä on toinen järjestys: SOCKS-yhteys, TLS-kättely ja sitten SMTP-tervehdys TLS:n sisällä. STARTTLS alkaa luettavalla tervehdyksellä ja EHLO:lla, päivittää virran ja hankkii sen jälkeen ominaisuudet uudelleen.

Julkinen konstruktori hoitaa yleensä pistokkeen määrityksen, tallennetut yhteysparametrit ja tervehdystiedot, alkuvastauksen ja EHLO:n HELO-varamenettelyineen tarpeen mukaan:

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;

Tämä julkinen esimerkki käyttää STARTTLS:ää eikä määritä SOCKS:aa. Palvelimen nimi valitsee postikohteen; Hello tarjoaa asiakkaan SMTP-identiteetin. Implisiittiselle TLS:lle käytä dokumentoitua SSL-konstruktiovaihtoehtoa ja palvelun porttia.

SendHello => 0 vaimentaa automaattisen EHLO/HELO:n, ei tervehdyksen lukemista tai transportin rakentamista. Rivinlukijan kutsuminen ja sitten hello() ei sekään ole dokumentoitu alustuksen korvaaja: Net::Cmd luokittelee matalan tason vastauslukijansa suojatuiksi aliluokan menetelmiksi.

Jos SOCKS on pakollinen, valitse asiakas, jossa on tuettu SOCKS-rajapinta, tai ylläpidä integraatiota tiettyä Net::SMTP-versiota vastaan. Käytä yllä olevaa järjestystä sen sopimuksena sen sijaan, että kopioisit yksityisiä kenttiä. Erillinen TCP-sovitin vaatii myös tietoista TLS-identiteetin käsittelyä: varmenteen on yksilöitävä todellinen postipalvelu, ja välityspalvelimen tunnukset pysyvät erillään SMTP-kirjautumisesta.

Aiheeseen liittyvät artikkelit