ສົ່ງອຸໂມງ CONNECT ໃຫ້ລູກຄ້າ SMTP ຂອງ Go
ໃຊ້ smtp.NewClient ກັບອຸໂມງທີ່ສ້າງແລ້ວ ແລະ ແຍກຊື່ໂຮສ SMTP ແລະ ການຈັບມື STARTTLS ອອກຈາກການຕັ້ງຄ່າ proxy.
smtp.Dial ເປີດການເຊື່ອມຕໍ່ໃໝ່ໄປຫາທີ່ຢູ່ຂອງມັນ. ຫຼັງຈາກໄດ້ຮັບການເຊື່ອມຕໍ່ຜ່ານ proxy HTTP CONNECT ແລ້ວ, ສົ່ງກະແສທີ່ມີຢູ່ແລ້ວນັ້ນໃຫ້ smtp.NewClient ແທນ.
ສຳລັບເຊີບເວີ SMTP ທີ່ຕ້ອງການ STARTTLS ເທິງພອດສົ່ງຂອງມັນ, ການສົ່ງຕໍ່ສາມາດເປັນດັ່ງນີ້:
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
}ແພັກເກດແມ່ນ net, net/smtp ແລະ crypto/tls. ຜູ້ເອີ້ນສະໜອງອຸໂມງທີ່ເຊື່ອມຕໍ່ແລ້ວກັບໂຮສ ແລະ ພອດ SMTP ທີ່ຕ້ອງການ, ໂດຍ ການແລກປ່ຽນ CONNECT ຂອງ proxy ສຳເລັດແລ້ວ. ການເປີດ TCP ໄປຫາ proxy ພຽງຢ່າງດຽວບໍ່ພຽງພໍ: ການຕອບສະໜອງ HTTP ບໍ່ແມ່ນຄຳທັກທາຍ SMTP.
mailHost ແມ່ນຊື່ໂຮສຂອງເຊີບເວີ SMTP, ບໍ່ມີພອດ. ຮັກສາຕົວຕົນນັ້ນໄວ້ສຳລັບການກວດສອບ SMTP ແລະ ການກວດສອບໃບຮັບຮອງ. ການເຊື່ອມຕໍ່ TLS ໄປຫາ proxy HTTPS ປົກປ້ອງສ່ວນອື່ນຂອງເສັ້ນທາງ.
ລູກຄ້າທີ່ສົ່ງຄືນມາພ້ອມສຳລັບການກວດສອບ SMTP ແລະ ທຸລະກຳເມວທີ່ມີຢູ່ຂອງແອັບພລິເຄຊັນ. ປິດມັນເມື່ອສຳເລັດ. ຈຳກັດການໂທ, CONNECT ແລະ ການດຳເນີນງານໂປຣໂຕຄໍລຕໍ່ໄປດ້ວຍນະໂຍບາຍກຳນົດເວລາຂອງແອັບພລິເຄຊັນ.
proxy ຕ້ອງອະນຸຍາດ CONNECT ໄປຫາພອດເມວທີ່ເລືອກ. ບາງອັນຈຳກັດມັນໄວ້ສຳລັບປາຍທາງ HTTPS ເທິງພອດ 443. ສຳລັບ SMTP ທີ່ມີ TLS ແບບຝັງຕົວ, ສ້າງເຊສຊັນ TLS ຂອງປາຍທາງກ່ອນເອີ້ນ NewClient ແທນການອອກ STARTTLS.