Peleka Handaki ya CONNECT kwa Mteja wa SMTP wa Go
Tumia smtp.NewClient na handaki iliyoanzishwa tayari na utenganishe jina la mwenyeji wa SMTP na makubaliano ya STARTTLS na usanidi wa proksi.
smtp.Dial hufungua muunganisho mpya kwa anwani yake. Baada ya kupata muunganisho kupitia proksi ya HTTP CONNECT, peana mtiririko huo uliopo kwa smtp.NewClient badala yake.
Kwa seva ya SMTP inayohitaji STARTTLS kwenye bandari yake ya kuwasilisha, uwasilishaji unaweza kuwa hivi:
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
}Vifurushi ni net, net/smtp na crypto/tls. Mpigaji hutoa handaki ambalo tayari limeunganishwa na mwenyeji na bandari ya SMTP inayokusudiwa, huku mabadilishano ya CONNECT ya proksi yamekamilika. Kufungua TCP tu kwa proksi hakutoshi: jibu la HTTP si salamu ya SMTP.
mailHost ni jina la mwenyeji wa seva ya SMTP, bila bandari. Hifadhi utambulisho huo kwa uthibitishaji wa SMTP na uthibitishaji wa cheti. Muunganisho wa TLS kwa proksi ya HTTPS hulinda sehemu nyingine ya njia.
Mteja uliorejeshwa uko tayari kwa uthibitishaji wa SMTP na shughuli ya barua zilizopo za programu. Funga ukiwa umemaliza. Punguza upigaji simu, CONNECT na shughuli za itifaki zinazofuata kwa sera ya muda wa mwisho ya programu.
Proksi lazima iruhusu CONNECT kwenye bandari ya barua iliyochaguliwa. Baadhi huizuia kwa maeneo ya HTTPS kwenye bandari 443. Kwa SMTP yenye TLS isiyo ya wazi, anzisha kikao cha TLS cha lengwa kabla ya kuita NewClient badala ya kutoa STARTTLS.