Dorëzo tunelin CONNECT te klienti SMTP i Go
Përdor smtp.NewClient me një tunel tashmë të vendosur dhe mbaj emrin e hostit SMTP dhe shtrëngimin e duarve STARTTLS veçmas nga konfigurimi i proxy-t.
smtp.Dial hap një lidhje të re drejt adresës së tij. Pasi të kesh marrë një lidhje përmes një proxy HTTP CONNECT, kaloje atë rrjedhë ekzistuese te smtp.NewClient në vend të kësaj.
Për një server SMTP që kërkon STARTTLS në portin e dërgimit, dorëzimi mund të jetë:
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
}Paketat janë net, net/smtp dhe crypto/tls. Thirrësi siguron një tunel tashmë të lidhur me hostin dhe portin e synuar SMTP, me shkëmbimin CONNECT të proxy-t të përfunduar. Vetëm hapja e TCP drejt proxy-t nuk mjafton: një përgjigje HTTP nuk është përshëndetje SMTP.
mailHost është emri i hostit të serverit SMTP, pa port. Ruaj atë identitet për vërtetimin SMTP dhe verifikimin e certifikatës. Një lidhje TLS me një proxy HTTPS mbron një segment tjetër të rrugës.
Klienti i kthyer është gati për vërtetimin SMTP dhe transaksionin e postës ekzistues të aplikacionit. Mbylle kur të mbarosh. Kufizo formimin, CONNECT dhe operacionet e mëpasshme të protokollit me politikën e afateve të aplikacionit.
Proxy duhet të lejojë CONNECT drejt portit të zgjedhur të postës. Disa e kufizojnë atë te destinacione HTTPS në portin 443. Për SMTP me TLS të nënkuptuar, vendos sesionin TLS të destinacionit përpara se të thirrësh NewClient në vend që të lëshosh STARTTLS.