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 كىملىكىنى بىر تەرەپ قىلىش كېرەك: گۇۋاھنامە ھەقىقىي ئېلخەت مۇلازىمىتىنى تونۇتۇشى كېرەك، پروكسىي šəxsiyati SMTP كىرىشتىن ئايرىم تۇرىدۇ.