ប្រគល់ផ្លូវរូង 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។