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 सत्र स्थापित करा.

संबंधित लेख