د CONNECT تونل Go د SMTP کلاینټ ته وسپارئ
له مخکې جوړ شوي تونل سره smtp.NewClient وکاروئ او د SMTP کوربه نوم او STARTTLS لاس ورکول د پروکسي ترتیب څخه جلا وساتئ.
smtp.Dial خپل پتې ته نوی اړیکه پرانیزي. وروسته له دې چې د HTTP CONNECT پروکسي له لارې اړیکه ترلاسه کړئ، هغه موجوده بهیر smtp.NewClient ته وسپارئ.
د هغه SMTP سرور لپاره چې د خپل لېږلو پورټ کې STARTTLS غواړي، سپارل کېدای شي داسې وي:
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 غونډه جوړه کړئ.