Lliura el túnel CONNECT al client SMTP de Go
Feu servir smtp.NewClient amb un túnel ja establert i manteniu el nom d'amfitrió SMTP i l'apretada de mà STARTTLS separats de la configuració del proxy.
smtp.Dial obre una connexió nova a la seva adreça. Després d'obtenir una connexió a través d'un proxy HTTP CONNECT, passeu aquest flux existent a smtp.NewClient en lloc seu.
Per a un servidor SMTP que requereix STARTTLS al seu port de submissió, el lliurament pot ser:
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
}Els paquets són net, net/smtp i crypto/tls. El cridador proporciona un túnel ja connectat a l'amfitrió i port SMTP desitjats, amb l'intercanvi CONNECT del proxy completat. Només obrir TCP cap al proxy no és suficient: una resposta HTTP no és una salutació SMTP.
mailHost és el nom d'amfitrió del servidor SMTP, sense port. Manteniu aquesta identitat per a l'autenticació SMTP i la verificació del certificat. Una connexió TLS a un proxy HTTPS protegeix una altra part de la ruta.
El client retornat està a punt per a l'autenticació SMTP i la transacció de correu existents de l'aplicació. Tanqueu-lo quan hàgiu acabat. Limiteu la marcació, el CONNECT i les operacions de protocol posteriors amb la política de terminis de l'aplicació.
El proxy ha de permetre CONNECT cap al port de correu triat. Alguns el restringeixen a destinacions HTTPS al port 443. Per a SMTP amb TLS implícit, establiu la sessió TLS de destinació abans de cridar NewClient en lloc d'emetre STARTTLS.