Jou de CONNECT-tunnel oan Go's SMTP-klant
Brûk smtp.NewClient mei in al oanleine tunnel en hâld de SMTP-hostnamme en STARTTLS-handshake skieden fan de proxy-ynstelling.
smtp.Dial iepenet in nije ferbining nei syn adres. Nei't jo in ferbining krigen hawwe fia in HTTP CONNECT-proxy, jou dan dy besteande stream oan smtp.NewClient ynstee.
Foar in SMTP-tsjinner dy't STARTTLS easket op syn yntsjinstpoarte, kin de oerdracht sa wêze:
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
}De pakketten binne net, net/smtp en crypto/tls. De oanropper leveret in tunnel dy't al ferbûn is mei de bedoelde SMTP-host en -poarte, mei de CONNECT-útwikseling fan 'e proxy foltôge. Allinnich TCP iepenje nei de proxy is net genôch: in HTTP-antwurd is gjin SMTP-groetnis.
mailHost is de hostnamme fan 'e SMTP-tsjinner, sûnder poarte. Hâld dy identiteit foar SMTP-autentikaasje en sertifikaatferifikaasje. In TLS-ferbining nei in HTTPS-proxy beskermet in oar part fan 'e rûte.
De werombrochte klant is klear foar de besteande SMTP-autentikaasje en posttransaksje fan 'e applikaasje. Slút him as jo klear binne. Behein kiezen, CONNECT en folgjende protokoloperaasjes mei it deadline-belied fan 'e applikaasje.
De proxy moat CONNECT tastean nei de keazen postpoarte. Guon beheine it ta HTTPS-bestemmingen op poarte 443. Foar SMTP mei ymplisite TLS, set de TLS-sesje fan 'e bestemming op foardat jo NewClient oanroppe, ynstee fan STARTTLS út te jaan.