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.