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 алдында бүкіл сәлемдесуді тұтыныңыз. Әйтпесе клиент EHLO-ның 250-ін күткенде ескі 220-ны оқып, сау қосылымда ырғақтан шығуы мүмкін.
Жасырын TLS басқа ретпен жүреді: SOCKS қосылымы, TLS қол алысу, содан кейін TLS ішінде SMTP сәлемдесуі. STARTTLS оқылатын сәлемдесу мен EHLO-дан басталады, ағынды жаңартады және кейін қабілеттерді қайта алады.
Жалпы конструктор әдетте сокет конфигурациясын, сақталған қосылым параметрлері мен сәлемдесу ақпаратын, бастапқы жауапты және қажет жерде HELO қосалқы нұсқасымен EHLO-ны өңдейді:
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 кіруінен бөлек қалады.