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 ይጀምራል፣ ፍሰቱን ያሻሽላል እና ከዚያ በኋላ ችሎታዎችን እንደገና ያገኛል።
የሕዝብ ገንቢው በተለምዶ የሶኬት ውቅርን፣ የተቀመጡ የግንኙነት ግቤቶችንና የሰላምታ መረጃን፣ የመጀመሪያውን ምላሽና 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 መግቢያ ተለይተው ይቆያሉ።