Anna CONNECT-tunnel Go SMTP-kliendile
Kasutage smtp.NewClientit juba loodud tunneliga ning hoidke SMTP-hostinimi ja STARTTLS-käepigistus puhverserveri seadistusest eraldi.
smtp.Dial avab uue ühenduse oma aadressile. Kui olete HTTP CONNECT-puhverserveri kaudu ühenduse saanud, edastage see olemasolev voog hoopis smtp.NewClient-ile.
SMTP-serveri jaoks, mis nõuab STARTTLS-i oma saatmisportil, võib üleandmine välja näha nii:
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
}Paketid on net, net/smtp ja crypto/tls. Kutsuja annab tunneli, mis on juba ühendatud soovitud SMTP-hostiga ja -pordiga, kusjuures puhverserveri CONNECT-vahetus on lõpetatud. Ainult TCP avamisest puhverserverini ei piisa: HTTP-vastus ei ole SMTP-tervitus.
mailHost on SMTP-serveri hostinimi ilma pordita. Säilitage see identiteet SMTP-autentimiseks ja sertifikaadi kontrollimiseks. TLS-ühendus HTTPS-puhverserveriga kaitseb marsruudi teist lõiku.
Tagastatud klient on valmis rakenduse olemasolevaks SMTP-autentimiseks ja postitehinguks. Sulgege see, kui olete lõpetanud. Piirake valimist, CONNECT-i ja järgnevaid protokollitoiminguid rakenduse tähtaegade poliitikaga.
Puhverserver peab lubama CONNECT-i valitud postipordile. Mõned piiravad selle HTTPS-sihtkohtadega pordil 443. Implitsiitse TLS-iga SMTP puhul looge sihtkoha TLS-seanss enne NewClienti kutsumist, selle asemel et väljastada STARTTLS.