smtp.Dial mécht eng nei Verbindung zu senger Adress op. Nodeems Dir eng Verbindung iwwer en HTTP CONNECT-Proxy kritt hutt, gitt dee bestehende Stream amplaz un smtp.NewClient weider.

Fir en SMTP-Server, deen STARTTLS op sengem Submission-Port verlaangt, kann d'Iwwergab sou ausgesinn:

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
}

D'Pakete sinn net, net/smtp an crypto/tls. Den Uruffer liwwert en Tunnel, dee schonn mam gewënschten SMTP-Host an -Port verbonnen ass, mat dem CONNECT-Austausch vum Proxy ofgeschloss. Just TCP zum Proxy opzemaachen ass net genuch: eng HTTP-Antwert ass keng SMTP-Begréissung.

mailHost ass den Hostnumm vum SMTP-Server, ouni Port. Haalt déi Identitéit fir SMTP-Authentifikatioun a Certificat-Iwwerpréiwung. Eng TLS-Verbindung zu engem HTTPS-Proxy schützt en aneren Deel vun der Streck.

Den zréckginnene Client ass prett fir déi bestehend SMTP-Authentifikatioun an d'Mailtransaktioun vun der Applikatioun. Maacht en zou, wann Dir fäerdeg sidd. Begrenzt d'Wielen, CONNECT an déi duerno Protokolloperatioune mat der Deadline-Politik vun der Applikatioun.

De Proxy muss CONNECT zum gewielte Mailport erlaben. E puer beschränken en op HTTPS-Ziler um Port 443. Fir SMTP mat implizitem TLS setzt d'TLS-Sessioun vum Zil op, ier Dir NewClient urufft, amplaz STARTTLS auszeginn.

Ähnlech Artikelen