Odovzdajte tunel CONNECT SMTP klientovi Go
Použite smtp.NewClient s už nadviazaným tunelom a držte názov hostiteľa SMTP a handshake STARTTLS oddelene od nastavenia proxy.
smtp.Dial otvára nové pripojenie na svoju adresu. Po získaní pripojenia cez HTTP CONNECT proxy odovzdajte tento existujúci tok funkcii smtp.NewClient.
Pre SMTP server, ktorý vyžaduje STARTTLS na svojom odosielacom porte, môže odovzdanie vyzerať takto:
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
}Balíky sú net, net/smtp a crypto/tls. Volajúci dodá tunel už pripojený k zamýšľanému hostiteľovi a portu SMTP, s dokončenou výmenou CONNECT na proxy. Samotné otvorenie TCP k proxy nestačí: odpoveď HTTP nie je SMTP pozdrav.
mailHost je názov hostiteľa SMTP servera bez portu. Zachovajte túto identitu pre autentifikáciu SMTP a overenie certifikátu. TLS pripojenie k proxy HTTPS chráni iný úsek trasy.
Vrátený klient je pripravený pre existujúcu autentifikáciu SMTP a poštovú transakciu aplikácie. Zatvorte ho po dokončení. Obmedzte vytáčanie, CONNECT a nasledujúce protokolové operácie politikou termínov aplikácie.
Proxy musí povoliť CONNECT na zvolený poštový port. Niektoré ho obmedzujú na ciele HTTPS na porte 443. Pre SMTP s implicitným TLS nadviažte reláciu TLS cieľa pred volaním NewClient namiesto vydania STARTTLS.