Net::SMTP 3.16 n'a pas de constructeur SOCKS préconnecté
Net::SMTP 3.16 ne documente aucune option de constructeur pour une socket préconnectée. Préservez la séquence d'accueil SMTP, EHLO et TLS lorsque vous choisissez une intégration de transport par proxy.
Net::SMTP 3.16 ne documente pas de paramètre de constructeur SOCKS ou de socket préconnectée. Envelopper un descripteur de fichier avec le new_from_fd hérité n'exécute pas son constructeur SMTP. Une connexion SOCKS réussie fournit un flux, pas une session de messagerie initialisée.
Pour SMTP simple, y compris une mise à niveau STARTTLS ultérieure, le serveur parle en premier :
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 ...Ceci est schématique ; les extensions annoncées varient. L'accueil lui-même peut s'étendre sur plusieurs lignes : un code de réponse suivi d'un tiret prolonge la réponse, tandis que sa dernière ligne la termine. Consommez tout l'accueil avant EHLO. Sinon le client peut lire un ancien 220 alors qu'il attend le 250 d'EHLO et perdre le rythme sur une connexion saine.
Le TLS implicite suit un autre ordre : connexion SOCKS, poignée de main TLS, puis accueil SMTP à l'intérieur de TLS. STARTTLS commence par l'accueil lisible et EHLO, met à niveau le flux et récupère ensuite les capacités.
Le constructeur public gère normalement la configuration de la socket, les paramètres de connexion enregistrés et les informations d'accueil, la réponse initiale et EHLO avec repli sur HELO le cas échéant :
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;Cet exemple public utilise STARTTLS et ne configure pas SOCKS. Le nom du serveur sélectionne la destination de messagerie ; Hello fournit l'identité SMTP du client. Pour TLS implicite, utilisez l'option de constructeur SSL documentée et le port du service.
SendHello => 0 supprime l'EHLO/HELO automatique, pas la lecture de l'accueil ni la construction du transport. Appeler un lecteur de lignes puis hello() n'est pas non plus un remplacement documenté de l'initialisation : Net::Cmd classe ses lecteurs de réponse de bas niveau comme méthodes protégées de sous-classe.
Si SOCKS est obligatoire, choisissez un client doté d'une interface SOCKS prise en charge ou maintenez une intégration contre la version précise de Net::SMTP. Utilisez la séquence ci-dessus comme contrat plutôt que de copier des champs privés. Un adaptateur TCP séparé nécessite aussi un traitement délibéré de l'identité TLS : le certificat doit identifier le véritable service de messagerie, et les identifiants du proxy restent distincts de la connexion SMTP.