Serahkan Terowongan CONNECT ke Klien SMTP Go
Gunakan smtp.NewClient dengan terowongan yang sudah terbentuk dan pisahkan nama host SMTP serta handshake STARTTLS dari penyiapan proxy.
smtp.Dial membuka koneksi baru ke alamatnya. Setelah memperoleh koneksi melalui proxy HTTP CONNECT, teruskan aliran yang sudah ada itu ke smtp.NewClient sebagai gantinya.
Untuk server SMTP yang mewajibkan STARTTLS pada port pengirimannya, penyerahannya dapat berupa:
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
}Paketnya adalah net, net/smtp, dan crypto/tls. Pemanggil menyediakan terowongan yang sudah terhubung ke host dan port SMTP tujuan, dengan pertukaran CONNECT proxy selesai. Hanya membuka TCP ke proxy tidak cukup: respons HTTP bukan sapaan SMTP.
mailHost adalah nama host server SMTP, tanpa port. Pertahankan identitas itu untuk autentikasi SMTP dan verifikasi sertifikat. Koneksi TLS ke proxy HTTPS melindungi bagian lain dari rute.
Klien yang dikembalikan siap untuk autentikasi SMTP dan transaksi surat yang sudah ada di aplikasi. Tutup setelah selesai. Batasi panggilan, CONNECT, dan operasi protokol berikutnya dengan kebijakan tenggat waktu aplikasi.
Proxy harus mengizinkan CONNECT ke port surat yang dipilih. Sebagian membatasinya ke tujuan HTTPS pada port 443. Untuk SMTP dengan TLS implisit, bentuk sesi TLS tujuan sebelum memanggil NewClient alih-alih mengeluarkan STARTTLS.