Net::SMTP 3.16 သည် SOCKS သို့မဟုတ် ကြိုတင်ချိတ်ဆက်ထားသော socket ၏ constructor ပါရာမီတာကို မှတ်တမ်းမတင်ပါ။ ဖိုင်ဖော်ပြချက်ကို အမွေရသော new_from_fd ဖြင့် ပတ်ခြုံခြင်းသည် ၎င်း၏ SMTP constructor ကို မလည်ပတ်ပါ။ အောင်မြင်သော SOCKS ချိတ်ဆက်မှုသည် stream ကို ပေးသည်၊ စတင်ထားသော မေးလ်ဆက်ရှင် မဟုတ်ပါ။

ရိုးရိုး 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 ...

၎င်းသည် ပုံကြမ်းဖြစ်သည်; ကြေညာထားသော extension များ ကွဲပြားသည်။ နှုတ်ဆက်ခြင်းကိုယ်တိုင် လိုင်းများစွာ ကျော်နိုင်သည်: အဖြေကုဒ်နောက် တုံးတိုတစ်ခု လိုက်ပါက အဖြေဆက်လက်သွားပြီး ၎င်း၏ နောက်ဆုံးလိုင်းက အဆုံးသတ်သည်။ EHLO မတိုင်မီ နှုတ်ဆက်ခြင်းတစ်ခုလုံးကို သုံးပါ။ သို့မဟုတ်ပါက client သည် EHLO ၏ 250 ကို မျှော်နေစဉ် 220 အိုကို ဖတ်မိပြီး ကျန်းမာသော ချိတ်ဆက်မှုတွင် စည်းချက်လွဲနိုင်သည်။

သွယ်ဝိုက် TLS တွင် အခြားအစီအစဉ် ရှိသည်: SOCKS ချိတ်ဆက်မှု၊ TLS လက်ဆွဲနှုတ်ဆက်မှု၊ ထို့နောက် TLS အတွင်းရှိ SMTP နှုတ်ဆက်ခြင်း။ STARTTLS သည် ဖတ်နိုင်သော နှုတ်ဆက်ခြင်းနှင့် EHLO ဖြင့် စတင်ပြီး stream ကို အဆင့်မြှင့်ကာ ထို့နောက် စွမ်းရည်များကို ပြန်လည်ရယူသည်။

အများသုံး constructor သည် များသောအားဖြင့် socket ဖွဲ့စည်းမှု၊ သိမ်းဆည်းထားသော ချိတ်ဆက်မှု ပါရာမီတာများနှင့် နှုတ်ဆက်ခြင်းအချက်အလက်၊ ကနဦးတုံ့ပြန်မှုနှင့် သင့်လျော်သည့်နေရာတွင် 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 က client ၏ SMTP အထောက်အထားကို ပေးသည်။ သွယ်ဝိုက် TLS အတွက် မှတ်တမ်းတင်ထားသော SSL constructor ရွေးချယ်မှုနှင့် ဝန်ဆောင်မှု၏ port ကို အသုံးပြုပါ။

SendHello => 0 သည် အလိုအလျောက် EHLO/HELO ကို နှိမ်နင်းသည်၊ နှုတ်ဆက်ခြင်းဖတ်ခြင်း သို့မဟုတ် သယ်ယူပို့ဆောင်ရေး တည်ဆောက်ခြင်းကို မဟုတ်ပါ။ လိုင်းဖတ်စက်ကို ခေါ်ပြီးနောက် hello() ခေါ်ခြင်းသည်လည်း စတင်ခြင်း၏ မှတ်တမ်းတင်ထားသော အစားထိုး မဟုတ်ပါ: Net::Cmd သည် ၎င်း၏ အဆင့်နိမ့် တုံ့ပြန်မှုဖတ်စက်များကို ကာကွယ်ထားသော အုပ်စုခွဲနည်းလမ်းများအဖြစ် အမျိုးအစားခွဲသည်။

SOCKS မဖြစ်မနေ လိုအပ်ပါက ပံ့ပိုးထားသော SOCKS အင်တာဖေ့စ်ရှိ client ကို ရွေးပါ သို့မဟုတ် သီးခြား Net::SMTP ဗားရှင်းအတွက် ပေါင်းစပ်မှုကို ထိန်းသိမ်းပါ။ သီးသန့် အကွက်များကို ကူးယူမည့်အစား အထက်ပါ အစီအစဉ်ကို ၎င်း၏ စာချုပ်အဖြစ် အသုံးပြုပါ။ သီးခြား TCP အဒက်တာသည်လည်း ရည်ရွယ်ချက်ရှိရှိ TLS အထောက်အထား ကိုင်တွယ်မှု လိုအပ်သည်: လက်မှတ်သည် အမှန်တကယ် မေးလ်ဝန်ဆောင်မှုကို ဖော်ထုတ်ရမည် ဖြစ်ပြီး proxy အထောက်အထားများသည် SMTP လော့ဂ်အင် နှင့် သီးခြား ရှိနေသည်။

ဆက်စပ်ဆောင်းပါးများ