CONNECT tunnelini Go'ning SMTP mijoziga topshiring
O'rnatilgan tunnel bilan smtp.NewClient dan foydalaning va SMTP xost nomi hamda STARTTLS qo'l berishini proksi sozlamasidan alohida saqlang.
smtp.Dial o'z manziliga yangi ulanish ochadi. HTTP CONNECT proksisi orqali ulanish olgach, o'sha mavjud oqimni buning o'rniga smtp.NewClient ga bering.
Yuborish portida STARTTLS talab qiladigan SMTP serveri uchun topshirish quyidagicha bo'lishi mumkin:
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
}Paketlar net, net/smtp va crypto/tls. Chaqiruvchi mo'ljallangan SMTP xosti va portiga allaqachon ulangan tunnelni taqdim etadi, proksining CONNECT almashinuvi tugagan. Proksiga faqat TCP ochish yetarli emas: HTTP javobi SMTP salomi emas.
mailHost SMTP serverining xost nomi, portsiz. Bu identifikatsiyani SMTP autentifikatsiyasi va sertifikat tekshiruvi uchun saqlang. HTTPS proksisiga TLS ulanishi marshrutning boshqa qismini himoya qiladi.
Qaytarilgan mijoz ilovaning mavjud SMTP autentifikatsiyasi va pochta tranzaksiyasiga tayyor. Tugatgach uni yoping. Qo'ng'iroq, CONNECT va keyingi protokol amallarini ilovaning muddat siyosati bilan cheklang.
Proksi tanlangan pochta portiga CONNECT ga ruxsat berishi kerak. Ba'zilari uni 443 portidagi HTTPS manzillari bilan cheklaydi. Yashirin TLS li SMTP uchun STARTTLS chiqarish o'rniga NewClient ni chaqirishdan oldin manzilning TLS sessiyasini o'rnating.