Serahkan Terowong CONNECT kepada Klien SMTP Go
Gunakan smtp.NewClient dengan terowong yang telah terbentuk dan asingkan nama hos SMTP serta jabat tangan STARTTLS daripada persediaan proksi.
smtp.Dial membuka sambungan baharu ke alamatnya. Selepas memperoleh sambungan melalui proksi HTTP CONNECT, serahkan strim sedia ada itu kepada smtp.NewClient sebagai gantinya.
Untuk pelayan SMTP yang memerlukan STARTTLS pada port penyerahannya, penyerahan itu boleh jadi:
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
}Pakejnya ialah net, net/smtp dan crypto/tls. Pemanggil membekalkan terowong yang sudah bersambung ke hos dan port SMTP yang dituju, dengan pertukaran CONNECT proksi selesai. Hanya membuka TCP ke proksi tidak memadai: respons HTTP bukan sapaan SMTP.
mailHost ialah nama hos pelayan SMTP, tanpa port. Kekalkan identiti itu untuk pengesahan SMTP dan pengesahan sijil. Sambungan TLS ke proksi HTTPS melindungi bahagian lain laluan.
Klien yang dikembalikan sedia untuk pengesahan SMTP dan transaksi mel sedia ada aplikasi. Tutupnya apabila selesai. Hadkan pendailan, CONNECT dan operasi protokol seterusnya dengan dasar tarikh akhir aplikasi.
Proksi mesti membenarkan CONNECT ke port mel yang dipilih. Sesetengah mengehadkannya kepada destinasi HTTPS pada port 443. Untuk SMTP dengan TLS tersirat, tubuhkan sesi TLS destinasi sebelum memanggil NewClient dan bukannya mengeluarkan STARTTLS.