smtp.Dial iepenet in nije ferbining nei syn adres. Nei't jo in ferbining krigen hawwe fia in HTTP CONNECT-proxy, jou dan dy besteande stream oan smtp.NewClient ynstee.

Foar in SMTP-tsjinner dy't STARTTLS easket op syn yntsjinstpoarte, kin de oerdracht sa wêze:

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
}

De pakketten binne net, net/smtp en crypto/tls. De oanropper leveret in tunnel dy't al ferbûn is mei de bedoelde SMTP-host en -poarte, mei de CONNECT-útwikseling fan 'e proxy foltôge. Allinnich TCP iepenje nei de proxy is net genôch: in HTTP-antwurd is gjin SMTP-groetnis.

mailHost is de hostnamme fan 'e SMTP-tsjinner, sûnder poarte. Hâld dy identiteit foar SMTP-autentikaasje en sertifikaatferifikaasje. In TLS-ferbining nei in HTTPS-proxy beskermet in oar part fan 'e rûte.

De werombrochte klant is klear foar de besteande SMTP-autentikaasje en posttransaksje fan 'e applikaasje. Slút him as jo klear binne. Behein kiezen, CONNECT en folgjende protokoloperaasjes mei it deadline-belied fan 'e applikaasje.

De proxy moat CONNECT tastean nei de keazen postpoarte. Guon beheine it ta HTTPS-bestemmingen op poarte 443. Foar SMTP mei ymplisite TLS, set de TLS-sesje fan 'e bestemming op foardat jo NewClient oanroppe, ynstee fan STARTTLS út te jaan.

Relatearre artikelen