Gee die CONNECT-tonnel aan Go se SMTP-kliënt oor
Gebruik smtp.NewClient met 'n bestaande tonnel en hou die SMTP-gasheernaam en STARTTLS-handdruk apart van die volmagopstelling.
smtp.Dial maak 'n nuwe verbinding na sy adres oop. Nadat jy 'n verbinding deur 'n HTTP CONNECT-volmag verkry het, gee daardie bestaande stroom eerder aan smtp.NewClient oor.
Vir 'n SMTP-bediener wat STARTTLS op sy indieningspoort vereis, kan die oorhandiging so lyk:
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
}Die pakkette is net, net/smtp en crypto/tls. Die oproeper voorsien 'n tonnel wat reeds aan die beoogde SMTP-gasheer en -poort gekoppel is, met die volmag se CONNECT-uitruiling voltooi. Om net TCP na die volmag oop te maak, is nie genoeg nie: 'n HTTP-antwoord is nie 'n SMTP-groet nie.
mailHost is die SMTP-bediener se gasheernaam, sonder 'n poort. Behouri daardie identiteit vir SMTP-verifikasie en sertifikaatverifikasie. 'n TLS-verbinding na 'n HTTPS-volmag beskerm 'n ander been van die roete.
Die teruggekeerde kliënt is gereed vir die toepassing se bestaande SMTP-verifikasie en pos-transaksie. Sluit dit wanneer jy klaar is. Begrens skakeling, CONNECT en daaropvolgende protokolbewerkings met die toepassing se sperdatumbeled.
Die volmag moet CONNECT na die gekose pospoort toelaat. Sommige beperk dit tot HTTPS-bestemmings op poort 443. Vir SMTP met implisiete TLS, vestig die bestemming se TLS-sessie voordat NewClient geroep word, eerder as om STARTTLS te stuur.