A Net::SMTP 3.16-ban nincs előre csatlakoztatott SOCKS-konstruktor
A Net::SMTP 3.16 nem dokumentál konstruktoropciót előre csatlakoztatott sockethez. A proxy átviteli integráció kiválasztásakor őrizze meg az SMTP-üdvözlést, az EHLO-t és a TLS-sorrendet.
A Net::SMTP 3.16 nem dokumentál SOCKS- vagy előre csatlakoztatott socket-konstruktorparamétert. Egy fájlleíró becsomagolása az örökölt new_from_fd-mal nem futtatja annak SMTP-konstruktorát. A sikeres SOCKS-kapcsolat adatfolyamot ad, nem inicializált levélmunkamenetet.
Egyszerű SMTP esetén, beleértve egy későbbi STARTTLS-frissítést is, a kiszolgáló beszél először:
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 ...Ez sematikus; a hirdetett kiterjesztések változnak. Maga az üdvözlés több sorra terjedhet: a válaszkódot követő kötőjel folytatja a választ, míg az utolsó sor lezárja. Az EHLO előtt fogyassza el a teljes üdvözlést. Ellenkező esetben a kliens régi 220-at olvashat, miközben az EHLO 250-ét várja, és kieshet a ritmusból egy egészséges kapcsolaton.
Az implicit TLS más sorrendet követ: SOCKS-kapcsolat, TLS-kézfogás, majd SMTP-üdvözlés a TLS-en belül. A STARTTLS az olvasható üdvözléssel és az EHLO-val kezdődik, frissíti az adatfolyamot, majd utána újra beszerzi a képességeket.
A nyilvános konstruktor általában kezeli a socket konfigurációját, a mentett kapcsolati paramétereket és az üdvözlési információkat, a kezdeti választ és az EHLO-t HELO-tartalékkal, ahol megfelelő:
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;Ez a nyilvános példa STARTTLS-t használ, és nem állít be SOCKS-t. A kiszolgálónév választja ki a levélcélpontot; a Hello adja a kliens SMTP-identitását. Implicit TLS esetén használja a dokumentált SSL konstruktoropciót és a szolgáltatás portját.
A SendHello => 0 elnyomja az automatikus EHLO/HELO-t, nem az üdvözlés olvasását vagy az átvitel felépítését. Egy soralvasó meghívása, majd a hello() hívása szintén nem dokumentált helyettesítője az inicializálásnak: a Net::Cmd az alacsony szintű válaszolvasóit védett alosztálymetódusokként osztályozza.
Ha a SOCKS kötelező, válasszon támogatott SOCKS-interfésszel rendelkező klienst, vagy tartson fenn integrációt az adott Net::SMTP-verzióhoz. A fenti sorrendet használja szerződésként a privát mezők másolása helyett. A külön TCP-adapternek is tudatos TLS-identitáskezelésre van szüksége: a tanúsítványnak a valódi levélszolgáltatást kell azonosítania, és a proxy hitelesítő adatai elkülönülnek az SMTP-bejelentkezéstől.