Το Net::SMTP 3.16 δεν έχει προσυνδεδεμένο κατασκευαστή SOCKS
Το Net::SMTP 3.16 δεν τεκμηριώνει επιλογή κατασκευαστή για προσυνδεδεμένη υποδοχή. Διατηρήστε ανέπαφη τη χαιρετισμό SMTP, το EHLO και τη σειρά TLS όταν επιλέγετε ενσωμάτωση μεταφοράς μέσω διακομιστή μεσολάβησης.
Το Net::SMTP 3.16 δεν τεκμηριώνει παράμετρο κατασκευαστή για SOCKS ή για προσυνδεδεμένη υποδοχή. Η περιτύλιξη ενός περιγραφέα αρχείου με το κληρονομημένο new_from_fd δεν εκτελεί τον κατασκευαστή SMTP του. Μια επιτυχής σύνδεση SOCKS παρέχει ροή, όχι αρχικοποιημένη συνεδρία αλληλογραφίας.
Για απλό SMTP, συμπεριλαμβανομένης μεταγενέστερης αναβάθμισης STARTTLS, ο διακομιστής μιλά πρώτος:
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 ...Αυτό είναι σχηματικό· οι διαφημιζόμενες επεκτάσεις ποικίλλουν. Ο χαιρετισμός μπορεί ο ίδιος να εκτείνεται σε πολλές γραμμές: ένας κωδικός απόκρισης που ακολουθείται από παύλα συνεχίζει την απόκριση, ενώ η τελευταία γραμμή την τερματίζει. Καταναλώστε ολόκληρο τον χαιρετισμό πριν από το EHLO. Διαφορετικά ο πελάτης μπορεί να διαβάσει ένα παλιό 220 ενώ περιμένει το 250 του EHLO και να χάσει τον βηματισμό σε μια υγιή σύνδεση.
Το έμμεσο TLS έχει άλλη σειρά: σύνδεση SOCKS, χειραψία TLS και μετά χαιρετισμός SMTP μέσα στο TLS. Το STARTTLS ξεκινά με τον αναγνώσιμο χαιρετισμό και το EHLO, αναβαθμίζει τη ροή και αποκτά ξανά δυνατότητες μετά.
Ο δημόσιος κατασκευαστής συνήθως χειρίζεται τη διαμόρφωση της υποδοχής, τις αποθηκευμένες παραμέτρους σύνδεσης και τις πληροφορίες χαιρετισμού, την αρχική απόκριση και το EHLO με εναλλακτική HELO όπου αρμόζει:
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;Αυτό το δημόσιο παράδειγμα χρησιμοποιεί STARTTLS και δεν ρυθμίζει SOCKS. Το όνομα διακομιστή επιλέγει τον προορισμό αλληλογραφίας· το Hello παρέχει την ταυτότητα SMTP του πελάτη. Για έμμεσο TLS, χρησιμοποιήστε την τεκμηριωμένη επιλογή κατασκευαστή SSL και τη θύρα της υπηρεσίας.
Το SendHello => 0 καταστέλλει το αυτόματο EHLO/HELO, όχι την ανάγνωση του χαιρετισμού ή την κατασκευή της μεταφοράς. Η κλήση αναγνώστη γραμμών και μετά hello() δεν είναι ούτε αυτή τεκμηριωμένη αντικατάσταση της αρχικοποίησης: το Net::Cmd ταξινομεί τους αναγνώστες αποκρίσεων χαμηλού επιπέδου ως προστατευμένες μεθόδους υποκλάσης.
Αν το SOCKS είναι υποχρεωτικό, επιλέξτε πελάτη με υποστηριζόμενη διεπαφή SOCKS ή συντηρήστε ενσωμάτωση για τη συγκεκριμένη έκδοση Net::SMTP. Χρησιμοποιήστε την παραπάνω σειρά ως συμβόλαιό της αντί να αντιγράφετε ιδιωτικά πεδία. Ένας ξεχωριστός προσαρμογέας TCP χρειάζεται επίσης συνειδητή διαχείριση ταυτότητας TLS: το πιστοποιητικό πρέπει να ταυτοποιεί την πραγματική υπηρεσία αλληλογραφίας και τα διαπιστευτήρια του διακομιστή μεσολάβησης παραμένουν ξεχωριστά από τη σύνδεση SMTP.