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 غونډه جوړه کړئ.

اړوندې مقالې