Net::SMTP 3.16 no tiene constructor SOCKS preconectado
Net::SMTP 3.16 no documenta ninguna opción de constructor para un socket preconectado. Mantenga intacta la secuencia de saludo SMTP, EHLO y TLS al elegir una integración de transporte por proxy.
Net::SMTP 3.16 no documenta ningún parámetro de constructor SOCKS ni de socket preconectado. Envolver un descriptor de archivo con el new_from_fd heredado no ejecuta su constructor SMTP. Una conexión SOCKS correcta proporciona un flujo, no una sesión de correo inicializada.
Para SMTP simple, incluida una actualización STARTTLS posterior, el servidor habla primero:
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 ...Esto es esquemático; las extensiones anunciadas varían. El saludo puede abarcar varias líneas: un código de respuesta seguido de un guion continúa la respuesta, mientras que su línea final la termina. Consuma todo el saludo antes de EHLO. De lo contrario, el cliente puede leer un 220 antiguo cuando espera el 250 de EHLO y perder el compás en una conexión sana.
El TLS implícito tiene otro orden: conexión SOCKS, handshake TLS y luego saludo SMTP dentro de TLS. STARTTLS comienza con el saludo legible y EHLO, actualiza el flujo y obtiene las capacidades de nuevo después.
El constructor público normalmente gestiona la configuración del socket, los parámetros de conexión guardados y la información del saludo, la respuesta inicial y EHLO con repliegue a HELO cuando corresponde:
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;Este ejemplo público usa STARTTLS y no configura SOCKS. El nombre del servidor selecciona el destino de correo; Hello aporta la identidad SMTP del cliente. Para TLS implícito, use la opción de constructor SSL documentada y el puerto del servicio.
SendHello => 0 suprime el EHLO/HELO automático, no la lectura del saludo ni la construcción del transporte. Llamar a un lector de líneas y después hello() tampoco es un sustituto documentado de la inicialización: Net::Cmd clasifica sus lectores de respuesta de bajo nivel como métodos protegidos de subclase.
Si SOCKS es obligatorio, elija un cliente con una interfaz SOCKS compatible o mantenga una integración contra la versión concreta de Net::SMTP. Use la secuencia anterior como su contrato en lugar de copiar campos privados. Un adaptador TCP separado también necesita un tratamiento deliberado de la identidad TLS: el certificado debe identificar el servicio de correo real, y las credenciales del proxy siguen separadas del inicio de sesión SMTP.