CONNECT ಸುರಂಗವನ್ನು Go ನ SMTP ಕ್ಲೈಂಟ್ಗೆ ಒಪ್ಪಿಸಿ
ಈಗಾಗಲೇ ಸ್ಥಾಪಿತವಾದ ಸುರಂಗದೊಂದಿಗೆ smtp.NewClient ಬಳಸಿ ಮತ್ತು SMTP ಹೋಸ್ಟ್ಹೆಸರು ಹಾಗೂ STARTTLS ಹ್ಯಾಂಡ್ಶೇಕ್ ಅನ್ನು ಪ್ರಾಕ್ಸಿ ಸೆಟಪ್ನಿಂದ ಪ್ರತ್ಯೇಕವಾಗಿ ಇರಿಸಿ.
smtp.Dial ತನ್ನ ವಿಳಾಸಕ್ಕೆ ಹೊಸ ಸಂಪರ್ಕವನ್ನು ತೆರೆಯುತ್ತದೆ. HTTP CONNECT ಪ್ರಾಕ್ಸಿ ಮೂಲಕ ಸಂಪರ್ಕ ಪಡೆದ ನಂತರ, ಆ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ಬದಲಿಗೆ smtp.NewClient ಗೆ ಒಪ್ಪಿಸಿ.
ತನ್ನ ಸಲ್ಲಿಕೆ ಪೋರ್ಟ್ನಲ್ಲಿ STARTTLS ಅಗತ್ಯವಿರುವ SMTP ಸರ್ವರ್ಗೆ, ಹಸ್ತಾಂತರವು ಹೀಗಿರಬಹುದು:
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 ಅಧಿವೇಶನವನ್ನು ಸ್ಥಾಪಿಸಿ.