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.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ