U dhiib tunnel-ka CONNECT macmiilka SMTP ee Go
Isticmaal smtp.NewClient oo leh tunnel hore loo sameeyay, oo ka sooc magaca martigeliyaha SMTP iyo gacan-qaadista STARTTLS ee dejinta proxy.
smtp.Dial waxay furtaa xiriir cusub ciwaankeeda. Ka dib markaad xiriir ka hesho proxy HTTP CONNECT, u gudbi qulqulkaas jira smtp.NewClient halkii.
Server SMTP oo u baahan STARTTLS dekeddiisa dirista, gudbintu waxay noqon kartaa sidan:
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
}Xirmooyinku waa net, net/smtp iyo crypto/tls. Wacaha wuxuu bixiyaa tunnel hore ugu xiran martigeliyaha iyo dekedda SMTP ee loogu talagalay, iyadoo isweydaarsiga CONNECT ee proxy dhammaystiran. Kaliya furitaanka TCP ee proxy kuma filna: jawaabta HTTP maaha salaanta SMTP.
mailHost waa magaca martigeliyaha serverka SMTP, oo aan deked lahayn. Hayso aqoonsigaas xaqiijinta SMTP iyo xaqiijinta shahaadada. Xiriirka TLS ee proxy HTTPS wuxuu ilaaliyaa qayb kale oo waddada ah.
Macmiilka la soo celiyay wuxuu diyaar u yahay xaqiijinta SMTP iyo macaamilka boostada ee jira ee codsiga. Xir markaad dhamaysato. Ku xaddid wicitaanka, CONNECT iyo hawlgallada borotokoolka ee xiga siyaasadda waqtiga ee codsiga.
Proxy waa inuu oggolaado CONNECT dekedda boostada ee la doortay. Qaar waxay ku xaddidaan yoolalka HTTPS ee dekedda 443. SMTP leh TLS aan toos ahayn, samee fadhiga TLS ee yoolka ka hor intaadan wicin NewClient halkii aad soo saari lahayd STARTTLS.