Net::SMTP 3.16 da oldindan ulangan SOCKS konstruktori yo'q
Net::SMTP 3.16 oldindan ulangan soket uchun hujjatlashtirilgan konstruktor parametrini taqdim etmaydi. Proksi orqali transport integratsiyasini tanlashda SMTP salomlashuvi, EHLO va TLS tartibini o'zgartirmasdan saqlang.
Net::SMTP 3.16 SOCKS yoki oldindan ulangan soket uchun konstruktor parametrini hujjatlashtirmaydi. Fayl deskriptorini meros qilib olingan new_from_fd bilan o'rash uning SMTP konstruktorini ishga tushirmaydi. Muvaffaqiyatli SOCKS ulanishi oqim beradi, ishga tushirilgan pochta seansi emas.
Oddiy SMTP uchun, keyinroq STARTTLS yangilanishini ham qo'shib, server birinchi gapiradi:
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 sxematik; e'lon qilingan kengaytmalar farq qiladi. Salomlashuvning o'zi bir necha qatorga cho'zilishi mumkin: javob kodi va undan keyingi chiziqcha javobni davom ettiradi, oxirgi qatori esa uni tugatadi. EHLO oldidan butun salomlashuvni iste'mol qiling. Aks holda mijoz EHLO ning 250 sini kutayotib eski 220 ni o'qib, sog'lom ulanishda ritmni yo'qotishi mumkin.
Yashirin TLS boshqa tartibga ega: SOCKS ulanishi, TLS qo'l siqish, so'ng TLS ichida SMTP salomlashuvi. STARTTLS o'qiladigan salomlashuv va EHLO bilan boshlanadi, oqimni yangilaydi va keyin yana imkoniyatlarni oladi.
Ommaviy konstruktor odatda soket konfiguratsiyasi, saqlangan ulanish parametrlari va salomlashuv ma'lumoti, boshlang'ich javob va kerak bo'lganda HELO zaxirasi bilan EHLO ni boshqaradi:
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 ommaviy misol STARTTLS dan foydalanadi va SOCKS ni sozlamaydi. Server nomi pochta manzilini tanlaydi; Hello mijozning SMTP identifikatorini beradi. Yashirin TLS uchun hujjatlashtirilgan SSL konstruktor parametri va xizmat portidan foydalaning.
SendHello => 0 avtomatik EHLO/HELO ni bostiradi, salomlashuvni o'qishni yoki transport qurishni emas. Qator o'quvchini chaqirib, keyin hello() ni chaqirish ham ishga tushirishning hujjatlashtirilgan o'rinbosari emas: Net::Cmd o'zining past darajadagi javob o'quvchilarini himoyalangan kichik sinf usullari sifatida tasniflaydi.
Agar SOCKS majburiy bo'lsa, qo'llab-quvvatlanadigan SOCKS interfeysiga ega mijozni tanlang yoki muayyan Net::SMTP versiyasiga qarshi integratsiyani saqlang. Shaxsiy maydonlarni nusxalash o'rniga yuqoridagi tartibni uning shartnomasi sifatida ishlating. Alohida TCP adapter ham ataylab TLS identifikatsiyasini boshqarishni talab qiladi: sertifikat haqiqiy pochta xizmatini aniqlashi kerak va proksi hisob ma'lumotlari SMTP kirishidan alohida qoladi.