Net::SMTP 3.16-da əvvəlcədən qoşulmuş SOCKS konstruktoru yoxdur
Net::SMTP 3.16 sənədləşdirilmiş əvvəlcədən qoşulmuş soket konstruktoru seçimi təqdim etmir. Proksi nəqliyyat inteqrasiyası seçərkən SMTP salamlamasını, EHLO və TLS ardıcıllığını olduğu kimi saxlayın.
Net::SMTP 3.16 SOCKS və ya əvvəlcədən qoşulmuş soket konstruktoru parametrini sənədləşdirmir. Fayl deskriptorunu miras alınan new_from_fd ilə bükmək onun SMTP konstruktorunu işə salmır. Uğurlu SOCKS bağlantısı ilkinləşdirilmiş poçt sessiyası deyil, axın verir.
Adi SMTP üçün, sonrakı STARTTLS yüksəltməsi də daxil olmaqla, əvvəlcə server danışır:
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 ...Bu sxematikdir; elan edilən genişlənmələr dəyişir. Salamlama özü bir neçə sətirə yayıla bilər: cavab kodundan sonra gələn defis cavabı davam etdirir, son sətri isə onu bitirir. EHLO-dan əvvəl bütün salamlamanı istehlak edin. Əks halda müştəri EHLO-nun 250-sini gözləyərkən köhnə 220-ni oxuya və sağlam bağlantıda addımdan çıxa bilər.
Gizli TLS-in başqa ardıcıllığı var: SOCKS bağlantısı, TLS əl sıxma, sonra TLS daxilində SMTP salamlaması. STARTTLS oxuna bilən salamlam və EHLO ilə başlayır, axını yüksəldir və sonra yenidən imkanlar əldə edir.
Açıq konstruktor adətən soket konfiqurasiyasını, saxlanmış bağlantı parametrlərini və salamlam məlumatını, ilk cavabı və lazım olduqda HELO fallback ilə EHLO-nu idarə edir:
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;Bu açıq nümunə STARTTLS istifadə edir və SOCKS konfiqurasiya etmir. Server adı poçt təyinatını seçir; Hello müştərinin SMTP kimliyini verir. Gizli TLS üçün sənədləşdirilmiş SSL konstruktor seçimini və xidmətin portunu istifadə edin.
SendHello => 0 avtomatik EHLO/HELO-nu söndürür, salamlamanın oxunmasını və ya nəqliyyatın qurulmasını yox. Sətir oxuyucusunu çağırıb sonra hello() çağırmaq da ilkinləşdirmə üçün sənədləşdirilmiş əvəz deyil: Net::Cmd öz aşağı səviyyəli cavab oxuyucularını qorunan alt sinif metodları kimi təsnif edir.
SOCKS məcburidirsə, dəstəklənən SOCKS interfeysi olan müştəri seçin və ya konkret Net::SMTP versiyasına qarşı inteqrasiya saxlayın. Şəxsi sahələri kopyalamaq əvəzinə yuxarıdakı ardıcıllığı onun müqaviləsi kimi istifadə edin. Ayrı TCP adapteri də qəsdən TLS kimliyi idarəetməsi tələb edir: sertifikat real poçt xidmətini müəyyən etməlidir və proksi etimadları SMTP girişindən ayrı qalır.