smtp.Dial yn agor cysylltiad newydd i'w gyfeiriad. Ar ôl cael cysylltiad trwy ddirprwy HTTP CONNECT, trosglwyddwch y ffrwd bresennol honno i smtp.NewClient yn lle hynny.

Ar gyfer gweinydd SMTP sy'n gofyn am STARTTLS ar ei borth cyflwyno, gall y trosglwyddiad fod fel hyn:

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
}

Y pecynnau yw net, net/smtp a crypto/tls. Mae'r galwr yn darparu twnnel sydd eisoes wedi'i gysylltu â gwesteiwr a phorth SMTP y bwriadwyd, gyda chyfnewidiad CONNECT y dirprwy wedi'i gwblhau. Nid yw agor TCP i'r dirprwy ar ei ben yn ddigon: nid yw ymateb HTTP yn gyfarchiad SMTP.

mailHost yw enw gwesteiwr y gweinydd SMTP, heb borth. Cadwch y hunaniaeth honno ar gyfer dilysu SMTP a gwirio tystysgrifau. Mae cysylltiad TLS â dirprwy HTTPS yn amddiffyn rhan arall o'r llwybr.

Mae'r cleient a ddychwelwyd yn barod ar gyfer dilysu SMTP a thrafodiad post presennol y rhaglen. Caewch ef pan fyddwch wedi gorffen. Cyfyngwch ddeialu, CONNECT a gweithrediadau protocol dilynol â pholisi terfynau amser y rhaglen.

Rhaid i'r dirprwy ganiatáu CONNECT i'r porth post a ddewiswyd. Mae rhai yn ei gyfyngu i gyrchfannau HTTPS ar borth 443. Ar gyfer SMTP TLS ymhlyg, sefydlwch sesiwn TLS y gyrchfan cyn galw NewClient yn lle cyhoeddi STARTTLS.

Erthyglau cysylltiedig