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.

Seotud artiklid