የCONNECT ዋሻውን ለGo የSMTP ደንበኛ አስረክብ
smtp.NewClientን ከተዘጋጀ ዋሻ ጋር ይጠቀሙ፤ የSMTP አስተናጋጅ ስምና የSTARTTLS ሂደትን ከፕሮክሲ ማዋቀር ለያዩ።
smtp.Dial ወደ አድራሻው አዲስ ግንኙነት ይከፍታል። በHTTP CONNECT ፕሮክሲ በኩል ግንኙነት ካገኙ በኋላ፣ ያንን ያለውን ጅረት በምትኩ ለsmtp.NewClient ያስተላልፉ።
በላኪ ወደቡ ላይ STARTTLS የሚፈልግ የSMTP አገልጋይ ካለ፣ ርክክቡ እንደሚከተለው ሊሆን ይችላል፦
func smtpOverTunnel(conn net.Conn, mailHost string) (*smtp.Client, error) {
client, err := smtp.NewClient(conn, mailHost)
if err != nil {
conn.Close()
return nil, err
}
err = client.StartTLS(&tls.Config{
ServerName: mailHost,
MinVersion: tls.VersionTLS12,
})
if err != nil {
client.Close()
return nil, err
}
return client, nil
}ጥቅሎቹ net፣ net/smtp እና crypto/tls ናቸው። ጠሪው ከታለመው የSMTP አስተናጋጅና ወደብ ጋር ቀድሞ የተገናኘ ዋሻ ያቀርባል፣ የፕሮክሲው CONNECT ልውውጥ ተጠናቆ። ወደ ፕሮክሲው ዝርዝር TCP መክፈት ብቻ በቂ አይደለም፦ የHTTP ምላሽ የSMTP ሰላምታ አይደለም።
mailHost የSMTP አገልጋዩ አስተናጋጅ ስም ነው፣ ወደብ ሳይካተት። ያንን መለያ ለSMTP ማረጋገጫና ለምስክር ወረቀት ማረጋገጫ ያቆዩ። ወደ HTTPS ፕሮክሲ የሚደረግ TLS ግንኙነት ሌላውን የመንገዱን ክፍል ይጠብቃል።
የተመለሰው ደንበኛ ለመተግበሪያው ነባር የSMTP ማረጋገጫና የመልእክት ግብይት ዝግጁ ነው። ሲጨርሱ ይዝጉት። መደወያ፣ CONNECT እና ቀጣይ የፕሮቶኮል ሥራዎችን በመተግበሪያው የመጨረሻ ጊዜ ፖሊሲ ይገድቡ።
ፕሮክሲው ወደተመረጠው የመልእክት ወደብ CONNECT መፍቀድ አለበት። አንዳንዶቹ በወደብ 443 ላይ ላሉ የHTTPS መዳረሻዎች ብቻ ይገድቡታል። ለተካተተ TLS SMTP፣ STARTTLS ከመስጠት ይልቅ NewClient ከመጥራትዎ በፊት የመዳረሻውን TLS ክፍለ ጊዜ ይመሥርቱ።