smtp.Dial letur upp eina nýggja samband til sína adressu. Tá tú hevur fingið samband gjøgnum ein HTTP CONNECT-proxy, lat tá tað verandi streymin til smtp.NewClient í staðin.

Fyri ein SMTP-tænara, sum krevur STARTTLS á sínum sendingarporti, kann handoverið vera soleiðis:

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
}

Pakningarnir eru net, net/smtp og crypto/tls. Kallarin veitir ein tunil, sum longu er knýttur at ætlaða SMTP-vertinum og portinum, við proxyins CONNECT-útskifti lokið. Bara at lata TCP upp til proxyið er ikki nóg mikið: eitt HTTP-svar er ikki ein SMTP-heilsan.

mailHost er vertsnavnið hjá SMTP-tænaranum, uttan port. Halt tað identitetið fyri SMTP-autentisering og certifikatváttan. Eitt TLS-samband til ein HTTPS-proxy verndar ein annan part av leiðini.

Tá ið klienturin kemur aftur, er hann klárur til verandi SMTP-autentisering og posttransaktión applikatiónarinnar. Lat hann aftur, tá tú eru liðugur. Avmarka ringing, CONNECT og síðani protokoll-gerðir við freist-politikki applikatiónarinnar.

Proxyið má loyva CONNECT til tað valda postportið. Nøkur avmarka tað til HTTPS-mál á porti 443. Fyri SMTP við implisittum TLS, set TLS-setuna hjá málinum upp, áðrenn tú kallar NewClient, í staðin fyri at geva STARTTLS út.

Skyldar greinar