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 መግቢያ ተለይተው ይቆያሉ።

ተዛማጅ ጽሑፎች