CONNECT টানেলখন Go ৰ SMTP ক্লায়েন্টক দিয়ক
প্ৰতিষ্ঠিত টানেলৰ সৈতে smtp.NewClient ব্যৱহাৰ কৰক আৰু SMTP হোষ্টনাম আৰু STARTTLS হেণ্ডশ্বেক প্ৰক্সি ছেটআপৰ পৰা পৃথক ৰাখক।
smtp.Dial ইয়াৰ ঠিকনালৈ এটা নতুন সংযোগ খোলে। 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 বিনিময় সম্পূৰ্ণ হোৱাৰ সৈতে। প্ৰক্সিলৈ মাত্ৰ TCP খোলা যথেষ্ট নহয়: HTTP সঁহাৰি SMTP অভিবাদন নহয়।
mailHost হ'ল SMTP চাৰ্ভাৰৰ হোষ্টনাম, পৰ্ট অবিহনে। SMTP প্ৰমাণীকৰণ আৰু প্ৰমাণপত্ৰ সত্যাপনৰ বাবে সেই পৰিচয় ৰাখক। HTTPS প্ৰক্সিলৈ TLS সংযোগে পথৰ অন্য এটা অংশ সুৰক্ষিত কৰে।
ঘূৰাই দিয়া ক্লায়েন্টটো এপ্লিকেশ্বনৰ বিদ্যমান SMTP প্ৰমাণীকৰণ আৰু মেইল লেনদেনৰ বাবে সাজু। শেষ হ'লে ইয়াক বন্ধ কৰক। ডায়েলিং, CONNECT আৰু পৰৱৰ্তী প্ৰটোকল কাৰ্যকলাপ এপ্লিকেশ্বনৰ সময়সীমা নীতিত সীমাবদ্ধ কৰক।
প্ৰক্সিয়ে বাছনি কৰা মেইল পৰ্টলৈ CONNECT অনুমোদন কৰিব লাগিব। কিছুমানে ইয়াক 443 পৰ্টৰ HTTPS গন্তব্যস্থানলৈ সীমিত ৰাখে। অন্তৰ্নিহিত TLS SMTP ৰ বাবে, STARTTLS জাৰি নকৰি NewClient কল কৰাৰ আগতে গন্তব্যস্থানৰ TLS ছেছন স্থাপন কৰক।