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 सत्र स्थापना गर्नुहोस्।

सम्बन्धित लेखहरू