Net::SMTP 3.16 non ha un costruttore SOCKS preconnnesso
Net::SMTP 3.16 non documenta alcuna opzione di costruttore per un socket preconnesso. Mantieni intatta la sequenza di saluto SMTP, EHLO e TLS quando scegli un'integrazione di trasporto tramite proxy.
Net::SMTP 3.16 non documenta alcun parametro di costruttore SOCKS o per socket preconnesso. Avvolgere un descrittore di file con il new_from_fd ereditato non esegue il suo costruttore SMTP. Una connessione SOCKS riuscita fornisce un flusso, non una sessione di posta inizializzata.
Per SMTP semplice, inclusa una successiva elevazione STARTTLS, il server parla per primo:
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 ...Questo è schematico; le estensioni annunciate variano. Il saluto stesso può estendersi su più righe: un codice di risposta seguito da un trattino prolunga la risposta, mentre la sua riga finale la termina. Consuma l'intero saluto prima di EHLO. Altrimenti il client può leggere un vecchio 220 mentre attende il 250 di EHLO e perdere il passo su una connessione sana.
Il TLS implicito ha un altro ordine: connessione SOCKS, handshake TLS, poi saluto SMTP dentro TLS. STARTTLS inizia con il saluto leggibile ed EHLO, aggiorna il flusso e in seguito ottiene di nuovo le capacità.
Il costruttore pubblico normalmente gestisce la configurazione del socket, i parametri di connessione salvati e le informazioni di saluto, la risposta iniziale ed EHLO con ripiego su HELO dove appropriato:
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;Questo esempio pubblico usa STARTTLS e non configura SOCKS. Il nome del server seleziona la destinazione della posta; Hello fornisce l'identità SMTP del client. Per il TLS implicito, usa l'opzione di costruttore SSL documentata e la porta del servizio.
SendHello => 0 sopprime l'EHLO/HELO automatico, non la lettura del saluto né la costruzione del trasporto. Anche chiamare un lettore di righe e poi hello() non è un sostituto documentato dell'inizializzazione: Net::Cmd classifica i suoi lettori di risposta di basso livello come metodi protetti di sottoclasse.
Se SOCKS è obbligatorio, scegli un client con un'interfaccia SOCKS supportata o mantieni un'integrazione contro la versione specifica di Net::SMTP. Usa la sequenza sopra come suo contratto invece di copiare campi privati. Un adattatore TCP separato richiede anche una gestione deliberata dell'identità TLS: il certificato deve identificare il servizio di posta reale e le credenziali del proxy restano separate dall'accesso SMTP.