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 ਸੈਸ਼ਨ ਸਥਾਪਿਤ ਕਰੋ।

ਸੰਬੰਧਿਤ ਲੇਖ