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, როცა EHLO-ს 250-ს ელოდება, და ჯანსაღ კავშირზე რიტმიდან გამოვიდეს.
იმპლიციტურ 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 შესვლისგან.